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