ホームページ >バックエンド開発 >C++ >C オブジェクトのインスタンス化: スタックとヒープ: 「新しい」か「新しい」ではないか?

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

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-02 01:19:13300ブラウズ

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

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

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

Without New

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

例:

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

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

With New

Usingオブジェクトをインスタンス化する「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.
  • ライフタイム: 「new」を使用せずにインスタンス化されたオブジェクトには自動ライフタイムが設定されますが、「new」を使用して作成されたオブジェクトには動的ライフタイムが設定され、手動で削除する必要があります。

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

以上がC オブジェクトのインスタンス化: スタックとヒープ: 「新しい」か「新しい」ではないか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。