可能重复:
是否有任何理由在删除之前检查 NULL 指针?
我知道C++ 语言保证 delete p 如果 p 等于 NULL 什么都不做。但是在不同的项目、文章、示例中,我经常看到它在删除之前检查 NULL。通常采用格式
if(pObj)
delete pObj;
为什么会这样?一些历史原因?我对如何正确删除对象感到完全困惑。
可能重复:
是否有任何理由在删除之前检查 NULL 指针?
我知道C++ 语言保证 delete p 如果 p 等于 NULL 什么都不做。但是在不同的项目、文章、示例中,我经常看到它在删除之前检查 NULL。通常采用格式
if(pObj)
delete pObj;
为什么会这样?一些历史原因?我对如何正确删除对象感到完全困惑。
为什么会这样?
无知。有些人不知道那delete(NULL);
是什么都不做。
您无法真正检查指针是否真的有效。如果您删除两次,您将调用未定义的行为。
不,这完全没有意义。delete 不会删除已经设置为空的指针!所以删除你喜欢的空指针!
delete
是一个运算符,它调用一个析构函数。当使用删除运算符而NULL
没有任何反应时,与所有答案一样,检查空值是没有意义的。
这样做的另一个原因是摆脱 valgrind 警告。