将智能指针用作全局变量

时间:2015-12-30 18:18:18

标签: c++ c++11 global-variables smart-pointers

让我们说我有一个程序,我必须使用一个全局变量(某种类型)。

我希望能够使用智能指针,所以我不必担心删除它。

在某个文件Common.hpp文件中我有声明:

extern unique_ptr<CommandBuffer> globalCommandBuffer;

在我的main.cpp中:

#include "Common.hpp"

int main(int argc, char* argv[]) {   
   globalCommandBuffer(new CommandBuffer());
}

这会产生许多编译错误。显然,我做错了。

我的问题是:

  • 将智能指针用于全局变量是一个很好的设计选择吗?
  • 如果是这样,这样做的正确方法是什么?
  • 哪个智能指针更合适?

3 个答案:

答案 0 :(得分:7)

你想要:

globalCommandBuffer.reset(new CommandBuffer());

或者:

globalCommandBuffer = std::make_unique<CommandBuffer>();

全局变量很少是一个好主意。

答案 1 :(得分:5)

如果你想要一个全球性的(你可能不这样做,但以防万一),只需创建一个全局的。智能指针的重点是管理所有权和生命周期。在全局的情况下,这些通常是非常微不足道的 - 您希望它们在发生任何其他事件之前存在,并继续存在直到其他所有事情都退出。

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

答案 2 :(得分:-2)

问题不在于全局变量,这是一些smart_ptr,但问题是你在头文件中定义了一次 - 而且在main.cpp中也是如此。双重定义肯定会有问题。