哪个代码好(如果好)
void DeleteObject(Object* obj)
{
delete obj;
}
或
void DeleteObject(Object** obj)
{
delete *obj;
}
int main()
{
Object *obj = new Object();
DeleteObject(&obj); or DeleteObject(obj);
}
实际上DeleteObject
函数不是那么短(它会删除对象字段)。
答案 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
)。当然有一些边缘案例,但鉴于你提出这样的问题,我认为你手上没有。