2

ヘッダーと実装のペア (x.hpp/x.cpp) がある状況があります。x.cpp で定義されたグローバル スコープを持つ静的変数がある場所。

ヘッダー x.hpp は、問題のアプリケーション内のさまざまな場所で使用されています。また、自動ロードまたは dlopen/LoadLibrary などを介して、アプリケーションが使用する dll によって使用されることも意図されています。

--- x.hpp ---
int foo();
void boo();

class fooboo
{ public: void boofoo() {} };
-------------

--- x.cpp ---
static fooboo global_var;
fooboo foo() { return global_var; }
void boo() { global_var.boofoo(); }
-------------

.

私の質問: C++ では、TU(x.hpp/x.cpp) を呼び出して使用する方法のさまざまなユース ケースすべてにおいて、global_var のインスタンスが 1 つだけ存在することを保証できる手段はありますか?

マルチスレッドと dll の状況を考慮してください。extern を使用して global_var を参照するコードベース内のすべてのインスタンスを確認する以外に、他にできることはありますか?

4

1 に答える 1

1

そのままでは、変数は x.cpp 翻訳単位内からのみ作成され、表示されます。x.cpp が一度しかコンパイルされないと仮定すると、存在できるのは 1 つだけです。.dll と .exe の両方に含めると、変数のインスタンスが 2 つになりますが、それ以外は安全です。ただし、foo() は fooboo への参照を返さず、そのコピーを返します (ちなみに、ヘッダー宣言とも一致しません)。

于 2013-02-26T00:39:56.893 に答える