删除NULL指针是否安全?
它是一种很好的编码风格吗?
我经常NULL在删除指针之前看到遗留代码检查,类似于
if (NULL != pSomeObject)
{
delete pSomeObject;
pSomeObject = NULL;
}
Run Code Online (Sandbox Code Playgroud)
NULL在删除之前有没有理由检查指针?NULL之后设置指针的原因是什么?
这是代码审查评论之一.
在为任何对象调用delete之前检查NULL是个好主意吗?
我确实理解删除运算符在内部检查NULL并且是多余的,但是提出的参数是删除,因为运算符可以重载,如果重载版本没有检查NULL,它可能会崩溃.因此,假设如果和何时删除将被重载,它是否安全合理,它将检查是否为NULL?在我的理解中,合理地假设第一种情况是重载删除应该处理NULL检查,并且审查点不成立.你怎么看?
我很困惑为什么下面的C++代码可以编译.为什么调用删除0的方法不会产生任何错误?!
int *arr = NULL; // or if I use 0, it's the same thing
delete arr;
Run Code Online (Sandbox Code Playgroud)
我确实尝试过运行它,它根本没有给我任何错误......
我在C++中有一个数组:
Player ** playerArray;
Run Code Online (Sandbox Code Playgroud)
它在它所在的类的构造函数中初始化.
在析构函数中,我有:
delete playerArray;
Run Code Online (Sandbox Code Playgroud)
除了通过Valgrind测试程序时,它说有一些调用要删除一个void指针:
operator delete(void*)
Run Code Online (Sandbox Code Playgroud)
我想在调用delete之前测试playerArray是否为void指针以避免此错误.
有谁知道如何做到这一点?