演算子 new メモリをゼロに初期化します
new 演算子はメモリをゼロで初期化しないという一般的な誤解にもかかわらず、実際にこれを実現できます。
C には、新しいシナリオが適用される 2 つの主なシナリオがあります。演算子はゼロ初期化を実行します:
括弧の初期化:
new の後に括弧と空の初期化子リストが続く場合 (wsk = new unsigned など) int(); を使用すると、その型のデフォルトのコンストラクターが明示的に呼び出されます。 unsigned int のようなプリミティブ型の場合、デフォルトのコンストラクターはメモリをゼロに初期化します。
括弧で囲まれた配列の初期化:
前のシナリオと同様、 wsa = new unsigned のように、配列宣言内で括弧と空の初期化子リストを使用するint[5](); は、配列の各要素をゼロに初期化します。
提供されているコード例では、次の行でゼロの初期化が示されています。
wsk2 = new unsigned int(5);
これにより、wsk2 が値 5 に初期化されます。
wsk2 = new unsigned int;
これにより、wsk2 が 0 に初期化されます。初期化子リストを使用せずに括弧構文を使用します。この動作は、スカラーと配列の両方に適用されます。
例の 2 番目の部分では、出力はゼロ初期化を確認します。
wsk2: 0x928e008 5 wsk2: 0x928e008 0
最初の行は、wsk2 がアドレス 0x928e008 を指していることを示しています。 wsk2 を削除し、new unsigned int; を使用して別の wsk2 を作成すると、2 行目はそれがポイントしていることを示します。同じアドレス (0x928e008) に送信されますが、ゼロが含まれています。
以上がC の「new」演算子は常にメモリをゼロに初期化しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。