删除函数内的对象

use*_*008 0 c++ function object delete-operator

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

void DeleteObject(Object* obj)
{
    delete obj;
}
Run Code Online (Sandbox Code Playgroud)

要么

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

int main()  
{  
    Object *obj = new Object();  
    DeleteObject(&obj); or DeleteObject(obj);  
}  
Run Code Online (Sandbox Code Playgroud)

实际上DeleteObject功能不是那么短(它删除了对象字段).

orl*_*rlp 7

这很好:

#include <memory>

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

  • 不应该尽可能避免`auto_ptr`?如果可用的话,可以选择boost或C++ 11`unner_ptr`或`shared_ptr`. (4认同)

Ed *_*eal 6

在我看来也不是.

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

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

  • 通过扩展,`Object :: ~Object`应该删除由`Object`持有的任何指针. (3认同)