在C ++中删除之前检查NULL - 良好实践?

时间:2012-12-11 10:56:05

标签: c++ delete-operator

  

可能重复:
  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;

为什么会这样?一些历史原因?我对如何正确删除对象感到困惑。

4 个答案:

答案 0 :(得分:16)

  

为什么会这样?

无知。有些人不知道delete(NULL);没有做任何事情。

你无法真正检查指针是否真的有效。如果删除两次,则表示您正在调用未定义的行为。

答案 1 :(得分:11)

不,这完全没有意义。 delete不会删除已设置为null的指针!所以删除所有类似的空指针!

答案 2 :(得分:1)

delete是一个运算符,它调用析构函数。当删除运算符与NULL一起使用时,没有任何反应,所有答案都是如此,检查空值是没有意义的。

答案 3 :(得分:1)

这样做的另一个原因是摆脱了valgrind警告。