2016-07-21 3 views
3

(第12章)、デフォルトで動的に割り当てられるオブジェクトはデフォルトで初期化されますか? C++プライマー5で

は、動的に割り当てられたオブジェクトは、内蔵または化合物のタイプのオブジェクトが値を不定していることを意味する、デフォルトの初期化されています。

int *pi = new int; // unitialized int 

この文では、デフォルトの初期化時に内蔵されたタイプのオブジェクトが値を未定義たことを示しています。ただし、の既定の初期化組み込み型オブジェクトの動作は、定義されている場所によって異なります

具体的には、任意の関数の外にある組み込み型オブジェクトは、0となりますが、一部のブロック内の組み込み型オブジェクトは、未定義の値を持ちます。

が、私はこれを正しく理解しています初期化

デフォルト=未定義値:!そこで

、私は上記の文は、ビルトインタイプのため、正確ではないと思いますか?

+0

グローバル変数とローカル変数は、コードを実行しているどのデバイスでも同じメモリにありません。局所的に割り当てられた変数はヒープ上にあり、グローバル変数はヒープで区切られているので、ゼロに初期化されているように見えます。しかし、それは少しの知識だけで推測している。 –

答えて

8

非クラス型の場合、デフォルトの初期化は初期化を行いません。

しかし、静的またはスレッド記憶期間を持つ変数は、他の初期化が行われる前に常にゼロ初期化されます。したがって、int x;がグローバルスコープにある場合、デフォルトの初期化は何も行われませんが、xは、デフォルトの初期化の前に行われるゼロ初期化のため、ゼロに初期化されます。

ダイナミックストレージ期間を持つ非クラスオブジェクトの場合、初期化子が指定されていない場合は、ゼロ初期化が適用されないため、値は不定です。

関連する問題