6

可能重复:
是否有任何理由在删除之前检查 NULL 指针?

我知道C++ 语言保证 delete p 如果 p 等于 NULL 什么都不做。但是在不同的项目、文章、示例中,我经常看到它在删除之前检查 NULL。通常采用格式

    if(pObj)
       delete pObj;

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

4

4 回答 4

15

为什么会这样?

无知。有些人不知道那delete(NULL);是什么都不做。

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

于 2012-12-11T10:59:27.897 回答
11

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

于 2012-12-11T10:57:01.920 回答
1

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

于 2012-12-11T11:00:55.873 回答
1

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

于 2012-12-11T11:02:41.583 回答