c++03
很明显,删除空指针没有任何效果。事实上,它明确指出§5.3.5/2
:
在任一替代方案中,如果 delete 的操作数的值是空指针,则该操作无效。
然而,在目前的草案c++0x
中似乎缺少了这句话。在草案的其余部分,我只能找到说明如果删除表达式的操作数不是空指针常量会发生什么的句子。是否删除仍定义在 中的空指针c++0x
,如果是,在哪里?
笔记:
有重要的间接证据表明它仍然是明确定义的。
首先,有两句话§5.3.5/2
说明
在第一种选择(删除对象)中,删除操作数的值可能是空指针值,...
和
在第二种选择(删除数组)中,删除操作数的值可能是空指针值或...
这些说允许操作数为空,但它们本身并没有真正定义如果它是会发生什么。
其次,改变 的含义delete 0
是一个重大的重大改变,标准委员会不太可能做出这种特殊的改变。c++0x
此外,草案的兼容性附件(附件 C)中没有提到这是一个重大变化。然而,附录 C 是一个信息性部分,因此这与标准的解释无关。
另一方面,要求删除空指针无效的事实意味着额外的运行时检查。在很多代码中,操作数永远不能为空,因此这种运行时检查与零开销原则相冲突。也许委员会只是决定改变行为以使标准 c++ 更符合语言的既定设计目标。