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>();