Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用智能指针作为全局变量_C++_C++11_Global Variables_Smart Pointers - Fatal编程技术网

C++ 使用智能指针作为全局变量

C++ 使用智能指针作为全局变量,c++,c++11,global-variables,smart-pointers,C++,C++11,Global Variables,Smart Pointers,假设我有一个程序,其中必须使用全局变量(某种类类型) 我希望能够使用智能指针,这样我就不必担心删除它 在一些文件Common.hpp中,我声明: extern unique_ptr<CommandBuffer> globalCommandBuffer; 这会产生许多编译错误。显然我做错了 我的问题是: 对全局变量使用智能指针是一个好的设计选择吗 如果是,正确的做法是什么 哪个智能指针更可取 您想要: globalCommandBuffer.reset(new CommandBuf

假设我有一个程序,其中必须使用全局变量(某种类类型)

我希望能够使用智能指针,这样我就不必担心删除它

在一些文件
Common.hpp
中,我声明:

extern unique_ptr<CommandBuffer> globalCommandBuffer;
这会产生许多编译错误。显然我做错了

我的问题是:

  • 对全局变量使用智能指针是一个好的设计选择吗
  • 如果是,正确的做法是什么
  • 哪个智能指针更可取
您想要:

globalCommandBuffer.reset(new CommandBuffer());
或:

globalCommandBuffer=std::make_unique();
全局变量很少是一个好主意。

如果你想要一个全局变量(你可能不想要,但以防万一),只需要创建一个全局变量。智能指针的全部意义在于管理所有权和生命周期。在全局的情况下,这些通常是很琐碎的——你希望它们在其他任何事情发生之前就存在,并继续存在,直到所有其他事情都停止发生


除非您需要与此不同的内容,否则只需将您的对象创建为全局对象,而不是指向动态分配对象的智能指针。

问题不在于全局变量,它是一个智能的ptr,而在于您在头文件中定义了一次,然后在main.cpp中定义了一次。双重定义肯定会有问题

你需要使用指针而不仅仅是一个普通变量,这有什么原因吗?不管类型如何,使用全局变量通常不是一个好主意。至于智能指针的使用,您不应该将其视为简单的自删除指针,而应该从资源所有权的角度来考虑它们:一个资源可以一次拥有一个所有者,也可以同时拥有多个所有者。另外,由于
std::unique_ptr
的语义,将其作为全局变量类型并没有多大意义,它应该作为参数传递。@Galik否。但我不知道如何在不使用动态变量的情况下初始化我的变量allocation@EladMaimoni如果你不需要动态分配,我会避免,只要弄清楚如何初始化语法(大多数参考/教程都应该包括这一点)…OP中的标题不包含任何定义。
globalCommandBuffer.reset(new CommandBuffer());
globalCommandBuffer = std::make_unique<CommandBuffer>();