グローバル変数の初期化順序

同じファイル内だと記述順 別ファイルの時は不定
知識の上では知っていたんだが……


グローバルオブジェクトAのコンストラクタから 別のSingletonパターンのオブジェクトBに アクセスするとメモリリークが出た
どうなっていたかというと

  1. グローバルオブジェクトA初期化
  2. Aのコンストラクタ内からBにアクセス
  3. アクセスに対応してBは自己生成 スタティックなポインタに自己アドレスを保存
  4. Bのスタティックポインタ 初期化 さっき生成したBのインスタンスは行方不明に


何がひどいって、初期化順序が逆だとフツーに動くわけで ちょっとした条件変化で再現性がなくなる点