More C++ Idioms/実行時の静的初期化順序に関するイディオム(Runtime Static Initialization Order Idioms)

実行時の静的初期化順序に関するイディオム(Runtime Static Initialization Order Idioms)

編集

意図

編集

ローカルではない静的オブジェクトの、翻訳単位間での初期化と破棄の順序を制御する (さもなくば、実装依存なやりかたで順序づけられる)。

動機

編集
  • 異なる翻訳単位間に渡る静的オブジェクトの初期化順序は厳密には定義されていない。破棄の順序は初期化順序の逆ではあるが初期化順序自体が実装依存である。この混沌に順序をもたらしたい。
  • 静的オブジェクトのデストラクタが自明ではなく(non-trivial)、重要な副作用を持っているため実行させなければならない場合。

解法とサンプルコード

編集

以下が、静的オブジェクトの初期化順序を制御するために用いられる一般的なイディオムである。