确保具有全局范围的静态变量在任何地方都存在

时间:2013-02-26 00:15:17

标签: c++ variables dll static-linking

我有一种情况,我有一个头/实现对(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的每个实例还有什么可以做的吗?

1 个答案:

答案 0 :(得分:1)

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