Answers:
Stroustrup自己回答。摘录:
C ++明确允许delete的实现将左值操作数清零,我曾希望实现能够做到这一点,但是这种想法似乎在实现者中并不流行。
但是他提出的主要问题是delete的参数不必是左值。
首先,设置为null将需要内存存储的变量。的确,您通常在变量中有一个指针,但有时您可能想删除一个刚计算出的地址处的对象。使用“无效”删除将是不可能的。
然后是性能。您可能以这样的方式编写代码:删除完成后,指针将立即超出范围。用null填充只是浪费时间。C ++是一种具有“不需要它?然后您不必为此付出代价”的思想的语言。
如果您需要安全保护,可以使用各种各样的智能指针,也可以编写自己的更好,更智能的指针。
delete (ptr + i)
自动将指针设置为NULL不能解决大多数错误使用指针的问题。它可以避免的唯一崩溃是如果您尝试将其删除两次。如果在这样的指针上调用成员函数怎么办?它仍然会崩溃(假设它访问成员变量)。C ++不会限制您在NULL指针上调用任何函数,也不应该从性能的角度执行此操作。