删除函数内的对象

时间:2012-04-23 19:42:44

标签: c++ function object delete-operator

哪个代码好(如果好)

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 个答案:

答案 0 :(得分:7)

这很好:

#include <memory>

int main(int argc, char **argv) {  
    std::auto_ptr<Object> ptr = new Object();
}

答案 1 :(得分:6)

在我看来既不是。

创建对象的人应该负责该对象,然后删除它。

所以我的回答是main应该delete

答案 2 :(得分:1)

我还建议使用@nightcracker建议的智能指针,但是如果你真的不想要我建议引用指针:

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

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

答案 3 :(得分:1)

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