¿Por qué un POD en una estructura inicializado por cero por un constructor implícito al crear un objeto en el montón o un objeto temporal en la pila?

El estándar yel El libro de C ++ dice que el constructor predeterminado implícito genera el constructor predeterminado para los miembros de tipo de clase, pero los tipos integrados no se inicializan. Sin embargo, en este programa de prueba obtengo resultados inesperados al asignar un objeto en el montón o al usar un objeto temporal:

#include<iostream>


struct Container
{
    int n;
};

int main()
{
    Container c;
    std::cout << "[STACK] Num: " << c.n << std::endl;

    Container *pc = new Container();
    std::cout << "[HEAP]  Num: " << pc->n << std::endl;
    delete pc;

    Container tc = Container();
    std::cout << "[TEMP]  Num: " << tc.n << std::endl;

}

Me sale esta salida:

[STACK] Num: -1079504552
[HEAP]  Num: 0
[TEMP]  Num: 0

¿Es este un comportamiento específico del compilador? Realmente no tengo la intención de confiar en esto, pero tengo curiosidad por saber por qué sucede esto, especialmente para el tercer caso.

Respuestas a la pregunta(2)

Su respuesta a la pregunta