さまざまな翻訳単位の特定の静的オブジェクトの前に初期化 (構築) する必要があるグローバルな静的 std::vector がある場合を検討しています。
これを処理する方法を調べると、2 つの提案された解決策に出くわします。
- グローバル静的オブジェクトの代わりに使用されるグローバル関数に静的オブジェクトを配置します。
- シュヴァルツカウンター
Schwarz カウンターの使用に関する私の懸念は、std::vector が 2 回初期化されることです。このリンクから、「グローバルオブジェクトが一度だけ初期化され、最初に使用される前に、それを使用する翻訳単位の数を維持するための便利な手法」が得られます。
グローバルが一度だけ初期化されるのはどのように機能しますか? 私の推論では、2回初期化されます。静的初期化の通常の過程で 1 回、および Schwarz カウンターの最初のインスタンスが初期化されるときに 1 回。
関連して、Schwarz カウンター コンストラクターの初期化コードはどのようになりますか? 新しいプレースメントを使用することしか考えられません。