这是代码审查评论之一。
在为任何对象调用 delete 之前检查 NULL 是否是个好主意?
我确实理解 delete 运算符在内部检查 NULL 并且是多余的,但提出的参数是 delete,因为运算符可以重载,如果重载版本不检查 NULL,它可能会崩溃。那么假设删除是否以及何时重载是否会检查NULL是否安全合理? 在我的理解中,假设第一种情况是重载的删除应该处理 NULL 检查,并且审查点不成立是合理的。你怎么看?
最佳答案
不,不要检查空值。标准说 delete (T*)0;
是有效的。它只会使您的代码复杂化而没有任何好处。如果 operator delete
被重载,最好在操作符的实现中检查 null。只是节省代码行和错误。
编辑:这个答案被接受和赞成,但在我看来,它的信息量不是很大。这里的所有答案都缺少一个,为了良心,让我在这里添加最后一个。
标准实际上在 [basic.stc.dynamic] 中说,至少从 C++03 开始:
Any allocation and/or deallocation functions defined in a C++ program, including the default versions in the library, shall conform to the semantics specified in 3.7.4.1 and 3.7.4.2.
其中引用的部分以及其他答案中列出的标准中的其他一些地方说传递空指针的语义是无操作的。
关于c++ - 使用重载删除删除对象之前的 NULL 检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3821261/