删除指向全局变量的指针?

时间:2013-08-23 00:23:43

标签: c++ pointers global-variables

所以,我有两个全局变量,我想指向某个类的对象。 我将它们在一个.h文件中声明为

extern Obj* pointer.

我在main函数中初始化该变量,如下所示:

pointer = new Obj();

稍后,我在main等中调用一些函数。 我可以在main的末尾调用delete运算符,如下所示:

delete pointer;

我的主要人物通常看起来像:

int main(){
    pointer = new Obj();
    //...
    delete pointer;
}

4 个答案:

答案 0 :(得分:2)

是的,这在语法上是有效的。 但是,以这种方式分配/释放全局指针是不好的做法,因为这些可能会在别处共享并导致难以跟踪错误。

答案 1 :(得分:1)

是的,因为它是在main()中分配的,所以在main()的末尾删除它是好的。

答案 2 :(得分:1)

所以这是一种更容易泄漏的方法:

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
}

答案 3 :(得分:0)

假设您的全局变量可能在多个地方使用,shared_ptr将是更好的方法。

但为此你必须检查访问它的最后一个资源并取消分配它。

另外,如果您认为自己将在一个地方使用它,可以考虑unique_ptr