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