正在删除指向全局变量的指针

Deleting a pointer to global variable?

本文关键字:全局变量 指针 删除      更新时间:2023-10-16

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