「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > C++ オブジェクトのインスタンス化: スタックとヒープ: 「新しい」か「新しい」ではないか?

C++ オブジェクトのインスタンス化: スタックとヒープ: 「新しい」か「新しい」ではないか?

2024 年 12 月 21 日に公開
ブラウズ:384

C   Object Instantiation:  Stack vs. Heap: `new` or Not `new`?

オブジェクトのインスタンス化: New の有無にかかわらず

C でオブジェクトを作成する場合、プログラマは「new」演算子を使用するか、オブジェクトを直接インスタンス化できます。それなしで。どちらの方法でもオブジェクトを作成しますが、いくつかの重要な点で異なります。

New なし

「new」なしでオブジェクトをインスタンス化すると、現在のスコープ内でそのオブジェクト用のメモリが直接予約されます。これは通常、スタック上で実行され、オブジェクトの有効期間が自動的に設定されます。オブジェクトは、定義されたスコープ内で自動的に作成および破棄されます。

例:

Time t(12, 0, 0); // t is a Time object

上記のコードでは、「Time」オブジェクト "t" がスタック上に作成され、その有効期間は現在のスコープにバインドされています。

New の場合

「new」を使用してオブジェクトをインスタンス化すると、ヒープ上にそのオブジェクトのメモリが動的に割り当てられます。これにより、オブジェクトの有効期間が終了したときにオブジェクトを明示的に作成および破棄できるようになります。ポインタ「t」には、オブジェクトのヒープ アドレスが格納されます。

例:

Time* t = new Time(12, 0, 0); // t is a pointer to a dynamically allocated Time object

ここで、ポインタ "t" には新しく作成された "Time" オブジェクトのヒープ アドレスが割り当てられます。オブジェクトの有効期間はスコープとは独立しており、「delete」演算子を使用してメモリを解放するまで存続します。

主な違い

  • メモリ割り当て: "new" を使用せずに作成されたオブジェクトはスタックにメモリを割り当てますが、"new" はスタックにメモリを割り当てます。 heap.
  • Lifetime: "new" を使用せずにインスタンス化されたオブジェクトには自動ライフタイムが設定されますが、"new" を使用して作成されたオブジェクトには動的ライフタイムが設定され、手動で削除する必要があります。

C 標準ではスタックとヒープの動作が明示的に定義されていないため、これらの違いは実装固有であることに注意することが重要です。ただし、ほとんどの実際の実装では、自動オブジェクトにはスタック メモリが使用され、動的オブジェクトにはヒープ メモリが使用されます。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3