C でのオブジェクトの破壊
オブジェクトの破壊: 何を、いつ、どのように行う
C では、オブジェクトは スコープ オブジェクト として大まかに分類できます。 動的オブジェクト。スコープ付きオブジェクトの存続期間は、それを囲んでいるスコープ (ローカル変数、グローバル変数、クラス インスタンスなど) に関連付けられていますが、動的オブジェクトはポインタ (new、delete など) を使用して作成および破棄されます。
スコープオブジェクト
-
自動オブジェクト: 制御フローがスコープを出るときに作成時と逆の順序で破棄されます (関数の終了、ブロックの終わりなど)。
-
非ローカル静的オブジェクト: 逆に破棄されます。 main() 実行後の作成順序。
-
ローカル静的オブジェクト: 制御フローが最初に定義に入ったときに構築され、main() の実行後に逆の順序で破棄されます。
-
基本クラスとメンバーのサブオブジェクト: 内で逆の順序で破棄されます。オブジェクトのデストラクター、その後にその基本クラスのサブオブジェクトが続きます。
-
配列要素: 降順で破棄されます。
-
一時オブジェクト: prvalue 式から作成され、完全な式が評価されると破棄されます。
動的オブジェクト
- 動的オブジェクト (新しい Foo): delete p を明示的に呼び出すことによって破棄されます。
- 動的配列 (新しい Foo[n] ): delete[] を明示的に呼び出すことによって破棄されます。 p.
例外処理
- 例外はスタックを通じて伝播され、以前に作成された自動オブジェクトのデストラクターを呼び出します。
- デストラクターは例外をスローしてはなりません。
- 例外が発生した場合
手動オブジェクト破棄
C にはガベージ コレクターがないため、動的オブジェクトは、リソースのリークを防ぐために手動で解放する必要があります。
スマートポインター
-
参照カウント スマート ポインター (std::shared_ptr): 参照している最後の std::shared_ptr が破棄されると、基になるオブジェクトを自動的に破棄します。
以上がC ではオブジェクトの破棄はどのように機能しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。