自動オブジェクト: 外側のスコープが指定されている場合、定義の逆の順序で破棄されます。
非ローカル静的オブジェクト: メイン (グローバル変数、静的メンバー データ) の実行後、定義とは逆の順序で破棄されます。
ローカル静的オブジェクト: 制御フローが最初に定義を渡したときに構築され、破棄されますmain (関数内の静的変数) の実行後に逆の順序で。
定義とは逆の順序で、最初のメンバー サブオブジェクト、次に基本クラスのサブオブジェクトで破棄されます。
降順で破棄されます。 n 番目の要素の構築中に例外が発生した場合、要素 n-1 から 0 が最初に破棄されます。
クラス型の prvalue 式が評価されるときに構築されます。含まれる式の評価が完了すると破棄されます。評価中に例外が発生した場合、一時オブジェクトは正しく破棄されます。
動的オブジェクト: new Foo で割り当てられ、delete p で破棄されます。 .
動的配列: 割り当て済みnew Foo[n] で削除し、delete[] p で破棄します。
どちらの場合も、メモリを複数回破棄しようとしたり、破棄後にアクセスしたり、間違った破棄メカニズムを使用したりしています (例: 単一オブジェクトの delete[])。 ) 未定義の動作が発生します。構築中に例外が発生した場合、動的に割り当てられたメモリは例外が伝播する前に解放されます。
std::shared_ptr
例外動作:
デストラクターはプログラムを終了する可能性があるため、例外をスローしてはなりません。オブジェクトの破棄中に例外が発生した場合、その例外は伝播され、以前に破棄されたサブオブジェクトはすべて正しく破棄されます。ただし、構築中に動的オブジェクトの例外が発生した場合、例外が伝播する前にメモリが解放され、オブジェクトのデストラクターは呼び出されません。
以上がC ではオブジェクトはどのように破棄されるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。