Стандарт и книга C ++ говорят, что конструктор по умолчанию для членов типа класса вызывается неявно сгенерированным конструктором по умолчанию, но встроенные типы не инициализируются. Однако в этой тестовой программе я получаю неожиданные результаты при размещении объекта в куче или при использовании временного объекта:
#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;
}
Я получаю такой вывод:
[STACK] Num: -1079504552
[HEAP] Num: 0
[TEMP] Num: 0
Это какое-то специфическое поведение компилятора? На самом деле я не собираюсь полагаться на это, но мне любопытно узнать, почему это происходит, особенно для третьего случая.