2

我有一个情况,我有一个标题/实现对(x.hpp/x.cpp)。在 x.cpp 中定义了一个全局范围的静态变量。

标头 x.hpp 用于相关应用程序中的许多不同位置。并且还打算由应用程序将使用的 dll 使用,无论是自动加载还是通过 dlopen/LoadLibrary 等。

--- 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 实例?

请考虑多线程和 dll 的情况。除了确保代码库中使用 extern 引用 global_var 的每个实例之外,还有什么可以做的吗?

4

1 回答 1

1

实际上,该变量仅在 x.cpp 翻译单元中创建和可见;只能有一个,假设 x.cpp 只编译一次。将它包含在 .dll 和 .exe 中会导致 2 个变量实例,但除此之外你是安全的。请注意,尽管 foo() 不会返回对 fooboo 的引用,但它会返回它的副本(顺便说一下,它也与标头声明不匹配)。

于 2013-02-26T00:39:56.893 回答