演算子 new メモリをゼロに初期化します
C では、 new 演算子は動的メモリ割り当てによく使用されます。指定されたサイズのメモリ ブロックを割り当て、割り当てられたメモリへのポインタを返します。ただし、new は割り当てられたメモリをゼロで初期化しないというよくある誤解があります。この記事では、new がメモリを初期化する方法を明確にし、明らかな矛盾に対処します。
デフォルトとゼロ初期化
new を使用してプリミティブ型 (例: int) のオブジェクトを作成する場合、unsigned int)、2 つあります。バリエーション:
同じことが配列にも当てはまります:
ゼロ初期化の明確化
new は通常、プリミティブを不定の値で初期化しますが、空の括弧構文 (new) でゼロ初期化を使用すると例外が発生します。タイプ();)。これにより、メモリがゼロで初期化されます。 C 11 標準では、次の動作がサポートされています。
[C++11: 5.3.4/15]: A new-expression that creates an object of type T initializes that object as follows: [...] If the new-initializer is interpreted according to the initialization rules of 8.5 for direct-initialization.
Placement New
Placement New を使用すると、特定の場所にメモリを割り当てることができます。ゼロ初期化でこの手法を利用すると、メモリが実際にゼロに設定されていることが明らかになります。
//... (memory allocation and initialization code) wsa[0] = 1; // Modify the memory location wsa[1] = 2; // Modify the memory location // ... (more modifications) //...
メモリに元の値 (1、2、...) が含まれている場合、ゼロ初期化は次のようになります。失敗した。ただし、出力は、割り当てられたメモリがゼロに設定されていることを確認します。
したがって、通常、new はプリミティブ メモリをゼロで初期化しませんが、ゼロ初期化 (new type();) を使用するとメモリがゼロに初期化されます。これは、直接メモリ割り当てと新規配置の両方に当てはまります。
以上がC の「new」はメモリをゼロに初期化しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。