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

Hel*_*oHi 6 c++ delete-operator

可能重复:
有没有理由在删除之前检查NULL指针?

我知道C++语言保证如果p等于NULL,delete p将不执行任何操作.但不断在不同的项目,文章,例子中我看到它在删除之前检查NULL.通常是格式

    if(pObj)
       delete pObj;
Run Code Online (Sandbox Code Playgroud)

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

BЈо*_*вић 16

为什么会这样?

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

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

  • +1'代表'无知',就是这样 (2认同)

goj*_*oji 11

不,这完全没有意义.delete不会删除已设置为null的指针!所以删除所有你喜欢的空指针!

  • 到底是什么 - 给C一个坏名字.您可以在C中安全地"释放"`NULL` ... (5认同)
  • @aleguna:这种逻辑的问题在于它适用于*所有*.您的代码应该检查`x ++`是否为`x`添加了一个?如果有人用破坏的代码重载`operator ++()`怎么办? (3认同)
  • C评论已删除:) (2认同)