gpt4 book ai didi

c++ - 静态全局 std::unique_ptr 消失

转载 作者:太空狗 更新时间:2023-10-29 20:37:00 26 4
gpt4 key购买 nike

我可能误解了静态对象的工作原理。假设如下

通用.hpp

struct common {};
static std::unique_ptr<common> global_ptr;

foo.cpp

#include "common.hpp"
void bar();
int main()
{
global_ptr = std::make_unique<common>();
bar();
}

酒吧.cpp

#include "common.hpp"
void bar()
{
*global_ptr; // crashes, because global_ptr is empty
}

我能够调试这种情况,并且 &global_ptrmain()bar() 中是不同的,这是为什么? global_ptr肯定是在main()中初始化的,我用起来没问题,但是为什么global_ptrbar()中> 似乎单元化了?

最佳答案

static 全局和命名空间范围内的变量表示 internal linkage .

The name can be referred to from all scopes in the current translation unit.

意思是global_ptr在不同的翻译单元中是不同的对象。静态变量在它自己的翻译单元之外是不可见的。可能有许多名为 global_ptr 的对象,但每个翻译单元只有一个。

如果你只想要一个全局变量,你可以在 common.hpp 中将它声明为:

extern std::unique_ptr<common> global_ptr;

并在cpp文件中定义它(可能是common.cpp):

std::unique_ptr<common> global_ptr;

关于c++ - 静态全局 std::unique_ptr 消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36374124/

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