C ++: por que não chama um destruidor?

Eu uso colchetes extras no meu código. Eu pensei quando o destruidor deveria ser chamado depois que o escopo da variável local fosse finalizado, mas não funciona assim:

class TestClass {
public:
    TestClass() {
        printf( "TestClass()\n" );
    }
    ~TestClass() {
        printf( "~TestClass()\n" );
    }
};

int main() {
    int a, b, c;
    {
         TestClass *test = new TestClass();
    }
}

Ele produz:

TestClass ()

Por isso não chama o destruidor do TestClass, mas por quê? Se eu chamá-lo manualmente (delete test) ele chama o destruidor, certo. Mas por que não chama o destruidor no primeiro caso?

questionAnswers(3)

yourAnswerToTheQuestion