所以,我有两个全局变量,我想指向某个类的对象。我在一个.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
,则可以考虑