私は誰かがC++のメモリ割り当て解除プロセスを明らかにできるかどうか疑問に思っていました。静的変数に関連してメモリが割り当て解除されるのはいつですか?
私は、静的な宣言構造体を持っている場合は、それのコンストラクタが実行するための最初のものであり、そのデストラクタが実行する最後のものであるように:
struct initializer execute_before_and_after_main {
initializer() { init(); }
~initializer() { cleanup(); }
}
static initializer execute_around_main;
そして、私は、その後のようなものがあります:
をclass my_class {
my_object objects[100];
}
extern my_class gobal_my_class;
my_class global_my_class;
、メインは、ここでは重要ではありません。
int main (int argc, char* argv[]) {
....
}
ときcleanup()
が呼び出されました。objects
配列に割り当て解除された/無効なメモリが含まれていますか?初期化/破壊の標準的なシーケンスは、誰かがおそらく私を指すことができるここで実装しているか?
おかげ
編集:私はこの種のコードはおそらくベストプラクティスではありません理解しますが、動作が定義されている場合、私はまだ疑問に思って。
時間が初期化されるので、はい、グローバル私のクラスが最初に破壊されます –
@CaptainObvlious lol私は私の答えに同じリンクを入れようとしていた – aaronman
静的記憶期間を持つオブジェクトの初期化と破壊のための標準的な定義されたシーケンスはありません。これは[static initialization order fiasco](http://www.parashift.com/c++-faq/static-init-order.html)と呼ばれます。 – Praetorian