【问题标题】:Do I need to delete a pointer if I haven't assigned it a new value?如果我没有为它分配一个新值,我是否需要删除它?
【发布时间】:2012-11-22 10:55:56
【问题描述】:

只是一个简单的问题:

如果我没有真正为指针赋值,是否需要删除它?

如果创建了一个指针,然后将它的引用传递给类似这样的东西,我做了什么:

Planet *planetPointer;

planetPointer = &earth;

我需要删除这个指针还是将其设置为空?

【问题讨论】:

标签: c++ pointers delete-operator


【解决方案1】:

你不需要删除它,而且,你不应该删除它。如果earth 是一个自动对象,它将被自动释放。因此,通过手动删除指向它的指针,您将陷入未定义的行为。

delete 分配给new

【讨论】:

  • 换一种说法:如果你没有new对象,你就没有它的所有权(除非相关文档另有说明),如果你没有所有权你不应该释放它。
  • 更糟糕的是,在某种程度上,earth 是对动态分配对象的引用。假设其他作者是一个好公民,那个地球物体最终会被分配它的东西释放。在这里删除它,程序将在以后的删除中失败。这是更糟糕的原因是因为错误消息表明错误出现在第二次删除时。 earth-allocating 代码的作者不可避免地会接到一个讨厌的电话或电子邮件,说“你的代码坏了!它正在掉核心。”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多