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



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

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

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

extern unique_ptr<CommandBuffer> globalCommandBuffer;

在我的主.cpp:

#include "Common.hpp"
int main(int argc, char* argv[]) {   
   globalCommandBuffer(new CommandBuffer());
}

这会产生许多编译错误。很明显我做错了。

我的问题是:

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

您想要其中之一:

globalCommandBuffer.reset(new CommandBuffer());

或者:

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

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

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

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

问题不在于全局变量,它是一些smart_ptr,而是问题在于您在头文件中定义了一次,在main.cpp中又定义了一个。双重定义肯定会有问题。

相关内容

  • 没有找到相关文章

最新更新