ホームページ > バックエンド開発 > C++ > C の「new」演算子は常にメモリをゼロに初期化しますか?

C の「new」演算子は常にメモリをゼロに初期化しますか?

Barbara Streisand
リリース: 2024-12-10 22:27:26
オリジナル
290 人が閲覧しました

Does the `new` Operator in C   Always Initialize Memory to Zero?

演算子 new メモリをゼロに初期化します

new 演算子はメモリをゼロで初期化しないという一般的な誤解にもかかわらず、実際にこれを実現できます。

C には、新しいシナリオが適用される 2 つの主なシナリオがあります。演算子はゼロ初期化を実行します:

  1. 括弧の初期化:

    new の後に括弧と空の初期化子リストが続く場合 (wsk = new unsigned など) int(); を使用すると、その型のデフォルトのコンストラクターが明示的に呼び出されます。 unsigned int のようなプリミティブ型の場合、デフォルトのコンストラクターはメモリをゼロに初期化します。

  2. 括弧で囲まれた配列の初期化:

    前のシナリオと同様、 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート