gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:28:51 24 4
gpt4 key购买 nike

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

header 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 中将导致变量的 2 个实例,但除此之外你是安全的。请注意,虽然 foo() 不会返回对 fooboo 的引用,但它会返回它的一个拷贝(顺便说一句,它也与 header 声明不匹配)。

关于c++ - 确保具有全局范围的静态变量在任何地方都存在一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15079065/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com