0

哪个代码好(如果好的话)

void DeleteObject(Object* obj)
{
    delete obj;
}

或者

void DeleteObject(Object** obj)  
{  
    delete *obj;  
}  

int main()  
{  
    Object *obj = new Object();  
    DeleteObject(&obj); or DeleteObject(obj);  
}  

事实上DeleteObject函数并没有那么短(它删除对象字段)。

4

4 回答 4

7

这很好:

#include <memory>

int main(int argc, char **argv) {  
    std::auto_ptr<Object> ptr = new Object();
}
于 2012-04-23T19:47:47.527 回答
6

在我看来,两者都没有。

创建对象的人应该对对象负责,从而将其删除。

所以我的回答是main应该这样做delete

于 2012-04-23T19:51:21.020 回答
1

我还建议使用@nightcracker 建议的智能指针,但如果您真的不希望这样做,我建议您引用指针:

void DeleteObject(Object* &obj)
{
    delete obj;
    obj = NULL;
}

这确保了原始指针设置为空,因此,您不会再意外访问该对象,并且引用比指向指针的指针更安全。

于 2012-04-23T19:54:24.100 回答
1

你说:“该函数删除对象字段”这只意味着这里发生了更可怕的事情。一个类应该负责在其析构函数和构造函数中管理自己的资源(子对象)。如果需要通过外部管理一些子对象,请提供公共 API 来管理它们。无论如何,不​​要使用原始指针来管理生命周期,而是使用智能指针(例如std::shared_ptr)。当然有一些边缘情况,但考虑到您要问这样的问题,我认为您手头上没有这样的问题。

于 2012-04-23T19:58:20.893 回答