如果我没有给一个指针分配一个新值,那么我需要删除它吗?

10

简单的问题:

如果我没有实际给指针赋新值,那么我需要删除它吗?

我的做法是创建一个指针,然后将其引用传递给某个东西:

Planet *planetPointer;

planetPointer = &earth;

我需要删除这个指针吗,还是只需要把它设置为 null?


12
只有删除你所新建的内容。 - chris
4
比@chris更严谨一些:规则是对于每个new操作,必须在某个时刻使用delete操作来释放内存,对于每个new[]操作,必须在某个时刻使用delete[]操作来释放内存。 - Nik Bougalis
重复 - http://stackoverflow.com/questions/12513426/what-happens-when-delete-pointer-to-stack-object?lq=1 - user93353
1个回答

19

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

只有使用new分配的内容才需要delete


1
换句话说:如果你没有使用 new 来创建对象,那么你就不拥有它(除非相关文档另有说明),如果你没有拥有它,就不应该对其进行释放。 - cdhowie
1
更糟糕的是,当earth是一个动态分配对象的引用时。假设其他作者是一个好公民,那么这个地球对象最终将被分配它的东西释放。在这里删除它,程序将在稍后的删除中失败。之所以更加恶劣,是因为错误消息使得错误似乎发生在第二次删除上。earth分配代码的作者将不可避免地接到一个让人不爽的电话或电子邮件,说“你的代码有问题!它正在掉核心。” - David Hammen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接