正在删除指向全局变量的指针
Deleting a pointer to global variable?
所以,我有两个全局变量,我想指向某个类的对象。我在一个.h文件中将它们声明为
extern Obj* pointer.
我在主函数中初始化该变量,如下所示:
pointer = new Obj();
稍后,我调用main等内部的一些函数。我可以在主界面的末尾呼叫删除操作员吗,比如:
delete pointer;
我的主要内容,通常看起来像:
int main(){
pointer = new Obj();
//...
delete pointer;
}
是的,这在语法上是有效的。然而,以这种方式分配/解除分配全局指针是一种糟糕的做法,因为这些指针可能会在其他地方共享,并导致难以跟踪的错误。
是的,因为它是在main()
中分配的,所以在main()
的末尾删除它是好的。
所以这里有一个更简单的方法,不能泄漏:
int main()
{
Obj o;
pointer = &o;
// ...
// automatically freed at the end of the scope
// you may also want to do
// pointer = nullptr;
// so cleanup code knows the object is already dead
}
假设全局变量可能在多个位置使用,shared_ptr
将是更好的方法。
但为此,你必须检查最后一个访问它的资源并将其释放
此外,如果您认为将在单个位置使用unique_ptr
,则可以考虑
相关文章:
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- 当vector是tje全局变量时,c++中vector的内存管理
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- 内联函数中具有内部链接的全局变量
- 如何在信号处理程序和普通函数中对全局变量进行互斥读写操作
- 全局变量 多读取器 一个写入器多线程安全?
- 如果全局变量默认是外部变量,为什么要添加"extern"关键字?
- 不同作用域中的静态变量和全局变量
- 全局外部指针变量在 DLL 中不可见
- 指向作为类成员的全局变量的指针
- 使用全局变量显示C++在使用 pthread 时比指针慢 100%?
- 存储在全局变量中的函数指针在进入函数时设置为 0,并在退出函数时返回到以前的状态
- 多进程 c++(11),链表指针作为全局变量
- 如何实例化全局智能指针变量
- 我可以在不使用全局变量的情况下将信息传递给函数指针回调吗?
- 正在删除指向全局变量的指针
- 使用智能指针作为全局变量
- 为什么我的全局变量必须声明为指针
- LLVM中的非指针全局变量
- 指向用户定义类型的类的全局变量指针