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



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

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

相关内容

最新更新