在调用delete或delete[]之前,总是忽略空指针检查是否安全,特别是在编写跨平台代码部分时?
我记得几年前(三到四次),我编写的相同的代码在MS上运行(用MSVCv12工具链编译),但是用g++编译的版本(不幸的是,我不记得g++版本)抛出了空指针引用。我发现了当时可能是编译器错误的信息。
我已经找到了this SO thread,但是在阅读了它之后,我仍然不太确定它是否安全,如果是的话-- C++标准的哪个版本?
发布于 2018-05-11 10:15:25
是的,自C++98以来的标准保证了delete或delete[]对空指针没有任何影响。
C++98§5.3.5/2
“,如果
delete的操作数的值是null指针,则操作无效。
在第一个标准之前也是如此,当时的语言是由“附加说明的参考手册”界定的。
关于
为Linux编译的“版本(不幸的是,我不记得g++版本)抛出了空指针引用
如果没有一个具体且最好是完整的再现行为的示例,就不可能讨论这个问题。它与删除一个空指针无关。
https://stackoverflow.com/questions/50290022
复制相似问题