ホームページ  >  記事  >  バックエンド開発  >  C ではオブジェクトの破棄はどのように機能しますか?

C ではオブジェクトの破棄はどのように機能しますか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-26 05:37:08869ブラウズ

How Does Object Destruction Work in C  ?

C でのオブジェクトの破壊

オブジェクトの破壊: 何を、いつ、どのように行う

C では、オブジェクトは スコープ オブジェクト として大まかに分類できます。 動的オブジェクト。スコープ付きオブジェクトの存続期間は、それを囲んでいるスコープ (ローカル変数、グローバル変数、クラス インスタンスなど) に関連付けられていますが、動的オブジェクトはポインタ (new、delete など) を使用して作成および破棄されます。

スコープオブジェクト

  • 自動オブジェクト: 制御フローがスコープを出るときに作成時と逆の順序で破棄されます (関数の終了、ブロックの終わりなど)。
  • 非ローカル静的オブジェクト: 逆に破棄されます。 main() 実行後の作成順序。
  • ローカル静的オブジェクト: 制御フローが最初に定義に入ったときに構築され、main() の実行後に逆の順序で破棄されます。
  • 基本クラスとメンバーのサブオブジェクト: 内で逆の順序で破棄されます。オブジェクトのデストラクター、その後にその基本クラスのサブオブジェクトが続きます。
  • 配列要素: 降順で破棄されます。
  • 一時オブジェクト: prvalue 式から作成され、完全な式が評価されると破棄されます。

動的オブジェクト

  • 動的オブジェクト (新しい Foo): delete p を明示的に呼び出すことによって破棄されます。
  • 動的配列 (新しい Foo[n] ): delete[] を明示的に呼び出すことによって破棄されます。 p.

例外処理

  • 例外はスタックを通じて伝播され、以前に作成された自動オブジェクトのデストラクターを呼び出します。
  • デストラクターは例外をスローしてはなりません。
  • 例外が発生した場合

手動オブジェクト破棄

C にはガベージ コレクターがないため、動的オブジェクトは、リソースのリークを防ぐために手動で解放する必要があります。

スマートポインター

  • 参照カウント スマート ポインター (std::shared_ptr): 参照している最後の std::shared_ptr が破棄されると、基になるオブジェクトを自動的に破棄します。

以上がC ではオブジェクトの破棄はどのように機能しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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