ホームページ  >  記事  >  バックエンド開発  >  C のデストラクターはグローバル変数と静的変数に対して呼び出されますか?

C のデストラクターはグローバル変数と静的変数に対して呼び出されますか?

DDD
DDDオリジナル
2024-11-06 13:22:02396ブラウズ

Do C   Destructors Get Called for Global and Static Variables?

C はグローバル静的変数とクラス静的変数のデストラクターを呼び出しますか?

いくつかの想定に反して、C は実際にグローバルとクラスの両方のデストラクターを呼び出します-静的変数。それらの破棄は 2 つの特定の時点で発生します:

  1. Main からの復帰時: main() 関数が終了すると、すべてのグローバル変数とクラス静的変数が破棄されます。これは、「メインから戻った結果として」この破棄を義務付ける C 03 標準の § 3.6.3 に準拠しています。
  2. Exit 呼び出し時: exit() 関数がプログラム内で使用すると、§ 3.6.3 で概説されているように、「exit を呼び出した結果として」グローバル変数とクラス静的変数の破棄がトリガーされます。

これらの変数は、コンストラクターまたは動的初期化の逆の順序を反映します。さらに、§ 9.4.2 7 に従って、静的データ メンバーは非ローカル オブジェクトと同様に初期化および破棄されます。

ただし、監視可能な動作を持たないデストラクターは呼び出されない可能性があることに注意することが重要です。これについては、「C デストラクターはブロックの終わりまで呼び出されないことが保証されていますか?」に対する Terry Mahaffey の回答でさらに詳しく説明されています

以上がC のデストラクターはグローバル変数と静的変数に対して呼び出されますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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