C でのグローバルおよびクラス静的変数のデストラクター呼び出し
C では、通常、オブジェクトは (ローカル変数用) スタック メモリに割り当てられます。およびヒープ メモリ (動的に割り当てられる変数用)。ただし、グローバル変数とクラス静的変数はプログラムのデータ セクションに割り当てられるため、次のような疑問が生じます: それらのデストラクターはいつ呼び出されますか?
C 03 標準 (§ 3.6.3) によると、静的ストレージ期間を持つ初期化されたオブジェクトは、main 関数から戻ったとき、および exit 関数が呼び出されたときに呼び出されます。これらのオブジェクトは、コンストラクターの完了または動的初期化の完了とは逆の順序で破棄されます。
さらに、クラスの静的データ メンバー (§ 9.4.2 7) の場合、その初期化と破棄の動作は、非
ただし、デストラクターに観察可能な動作がない (つまり、副作用を実行しない) 場合、デストラクターは呼び出されない可能性があります。これは、「ブロックの終わりまで C デストラクターが呼び出されないことが保証されていますか?」に対する Terry Mahaffey の回答で説明されているように、コンパイラーがコードを最適化して不要なデストラクターの呼び出しを回避できるためです。
以上がC でグローバルおよびクラス静的変数に対してデストラクターが呼び出されるのはどのような場合ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。