C ++: ¿Por qué no se llama un destructor?

Yo uso corchetes adicionales en mi código. Pensé cuando debería llamarse al destructor una vez que se terminó el alcance de la variable local, pero no funciona así:

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

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

Produce:

TestClass ()

Así que no llama al destructor de la TestClass pero ¿por qué? Si lo llamo manualmente (eliminar prueba) llama al destructor, a la derecha. ¿Pero por qué no llama al destructor en el primer caso?

Respuestas a la pregunta(3)

Su respuesta a la pregunta