简单的问题:
如果我没有实际给指针赋新值,那么我需要删除它吗?
我的做法是创建一个指针,然后将其引用传递给某个东西:
Planet *planetPointer;
planetPointer = &earth;
我需要删除这个指针吗,还是只需要把它设置为 null?
简单的问题:
如果我没有实际给指针赋新值,那么我需要删除它吗?
我的做法是创建一个指针,然后将其引用传递给某个东西:
Planet *planetPointer;
planetPointer = &earth;
我需要删除这个指针吗,还是只需要把它设置为 null?
不需要删除它,而且你不应该删除它。如果earth
是一个自动对象,它将被自动释放。因此,通过手动删除指向它的指针,您进入了未定义行为。
只有使用new
分配的内容才需要delete
。
new
来创建对象,那么你就不拥有它(除非相关文档另有说明),如果你没有拥有它,就不应该对其进行释放。 - cdhowieearth
是一个动态分配对象的引用时。假设其他作者是一个好公民,那么这个地球对象最终将被分配它的东西释放。在这里删除它,程序将在稍后的删除中失败。之所以更加恶劣,是因为错误消息使得错误似乎发生在第二次删除上。earth
分配代码的作者将不可避免地接到一个让人不爽的电话或电子邮件,说“你的代码有问题!它正在掉核心。” - David Hammen