標準と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
これはコンパイラ固有の動作ですか?私はこれに頼るつもりはありませんが、特に3番目のケースで、なぜこれが発生するのか知りたいです。