Por que um POD em uma estrutura é inicializado com zero por um construtor implícito ao criar um objeto na pilha ou um objeto temporário na pilha?

O padrão ea O livro C ++ diz que o construtor padrão para membros do tipo de classe é chamado pelo construtor padrão gerado implícito, mas os tipos internos não são inicializados. No entanto, neste programa de teste, obtenho resultados inesperados ao alocar um objeto na pilha ou ao usar um objeto temporário:

#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;

}

Eu recebo esta saída:

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

Isso é algum comportamento específico do compilador? Eu realmente não pretendo confiar nisso, mas estou curioso para saber por que isso acontece, especialmente no terceiro caso.

questionAnswers(2)

yourAnswerToTheQuestion