ヒープ内のオブジェクトまたはスタック内の一時オブジェクトを作成する際に、暗黙のコンストラクターによって構造体のポッドがゼロイテリア化されているのはなぜですか?

StackOverflow https://stackoverflow.com/questions/4932781

質問

標準と 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番目のケースのために、なぜこれが起こるのか知りたいと思っています。

正しい解決策はありません

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top