【发布时间】:2023-04-04 02:58:01
【问题描述】:
假设我有一个程序,我必须在其中使用一个全局变量(某种类类型)。
我希望能够使用智能指针,这样我就不必担心删除它了。
在某个文件Common.hpp 文件中我有声明:
extern unique_ptr<CommandBuffer> globalCommandBuffer;
在我的 main.cpp 中:
#include "Common.hpp"
int main(int argc, char* argv[]) {
globalCommandBuffer(new CommandBuffer());
}
这会产生许多编译错误。所以很明显我做错了。
我的问题是:
- 对全局变量使用智能指针是一个好的设计选择吗?
- 如果是这样,正确的做法是什么?
- 哪种智能指针更可取?
【问题讨论】:
-
是否有理由需要使用指针而不是普通变量?
-
拥有全局变量通常不是一个好主意,不管是什么类型。至于您对智能指针的使用,您不应该将它们视为简单的自删除指针,而是从资源所有权的角度来考虑它们:资源一次是否可以有一个所有者,或多个同时拥有者。此外,由于
std::unique_ptr的语义,将其作为全局变量类型确实没有多大意义,它应该作为参数传递。 -
@Galik 没有。但我不知道如何在不使用动态分配的情况下初始化我的变量
-
@EladMaimoni 如果您不需要动态分配,那么我会避免它,只需弄清楚如何初始化的语法(大多数参考/教程应该涵盖这一点)..
标签: c++ c++11 global-variables smart-pointers