C++ で静的変数を使用する場合、ある変数を初期化して別の変数をそのコンストラクターに渡したいと思うことがよくあります。つまり、相互に依存する静的インスタンスを作成したいと考えています。
単一の .cpp または .h ファイル内では、これは問題ではありません。インスタンスは、宣言された順序で作成されます。ただし、静的インスタンスを別のコンパイル単位のインスタンスで初期化したい場合、順序を指定することは不可能のようです。その結果、天候によっては、別のインスタンスに依存するインスタンスが構築され、その後でのみ別のインスタンスが構築されることがあります。その結果、最初のインスタンスが正しく初期化されません。
静的オブジェクトが正しい順序で作成されるようにする方法を知っている人はいますか? 私は長い間解決策を探し、それらすべて (Schwarz Counter ソリューションを含む) を試してきましたが、本当に機能するものがあるとは思えません。
1 つの可能性は、静的関数メンバーを使用したトリックです。
Type& globalObject()
{
static Type theOneAndOnlyInstance;
return theOneAndOnlyInstance;
}
確かに、これは機能します。残念ながら、globalObject.MemberFunction() の代わりに globalObject().MemberFunction() を記述する必要があるため、クライアント コードがやや混乱し、洗練されていません。
更新:ご反応ありがとうございます。残念ながら、私は自分の質問に答えたようです。私はそれと一緒に暮らすことを学ばなければならないと思います...