可能重复:
Is there any reason to check for a NULL pointer before deleting?
我知道The C++ language guarantees that delete p will do nothing if p is equal to NULL。但不断在不同的项目,文章,例子中我看到它在删除之前检查NULL。通常采用格式
if(pObj)
delete pObj;
为什么会这样?一些历史原因?我对如何正确删除对象感到困惑。
答案 0 :(得分:16)
为什么会这样?
无知。有些人不知道delete(NULL);
没有做任何事情。
你无法真正检查指针是否真的有效。如果删除两次,则表示您正在调用未定义的行为。
答案 1 :(得分:11)
不,这完全没有意义。 delete不会删除已设置为null的指针!所以删除所有类似的空指针!
答案 2 :(得分:1)
delete
是一个运算符,它调用析构函数。当删除运算符与NULL
一起使用时,没有任何反应,所有答案都是如此,检查空值是没有意义的。
答案 3 :(得分:1)
这样做的另一个原因是摆脱了valgrind警告。