为了账号安全,请及时绑定邮箱和手机立即绑定

为什么不删除将指针设置为NULL?

为什么不删除将指针设置为NULL?

C++
噜噜哒 2019-10-16 14:29:27
我一直想知道为什么删除后将指针自动设置为NULL 并不是标准的一部分。如果得到解决,那么由于无效指针而导致的许多崩溃将不会发生。但话虽如此,我仍然可以想到该标准将限制此限制的几个原因:性能:附加说明可能会降低delete性能。可能是因为const指针。然后我想标准再次可以为这种特殊情况做些什么。有谁知道不允许这样做的确切原因?
查看完整描述

3 回答

?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

Stroustrup自己回答。摘录:


C ++明确允许delete的实现将左值操作数清零,我曾希望实现能够做到这一点,但是这种想法似乎在实现者中并不流行。


但是他提出的主要问题是delete的参数不必是左值。


查看完整回答
反对 回复 2019-10-16
?
冉冉说

TA贡献1877条经验 获得超1个赞

首先,设置为null将需要内存存储的变量。的确,您通常在变量中有一个指针,但有时您可能想删除一个刚计算出的地址处的对象。使用“无效”删除将是不可能的。

然后是性能。您可能以这样的方式编写了代码:删除完成后,指针将立即超出范围。用null填充只是浪费时间。C ++是一种具有“不需要它?然后您不必为此付出代价”的思想的语言。

如果您需要安全保护,则可以使用各种各样的智能指针,也可以编写自己的更好,更智能的指针。


查看完整回答
反对 回复 2019-10-16
?
繁花不似锦

TA贡献1851条经验 获得超4个赞

您可以有多个指向该内存的指针。如果您为删除指定的指针设置为null,但所有其他指针都不设置为null,则会产生错误的安全感。指针不过是一个地址,一个数字。也可能是带有取消引用操作的int。我的观点是,您还必须扫描每个指针,以找到那些引用了刚删除的同一内存的指针,并将它们也清空了。扫描所有指向该地址的指针并将其清空的计算量很大,因为该语言不是为此设计的。(尽管其他一些语言也构造了它们的引用,以不同的方式实现相似的目标。)


查看完整回答
反对 回复 2019-10-16
  • 3 回答
  • 0 关注
  • 864 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信