2012-12-04 32 views
3

只是一个简单的问题:如果我没有为它指定一个新值,我是否需要删除一个指针?

我是否需要删除一个指针,如果我没有实际分配一个新的值呢?

如果创建一个指向我所做的,然后递给了一些参考,像这样:

Planet *planetPointer; 

planetPointer = &earth; 

我需要删除这个指针或可我只是将它设置为空?

+6

只有'删除'你'新'。 – chris

+3

要比@chris更迂腐:规则是,对于* every * new,您应该在* some *处有一个删除,并且对于每个新的[],您应该在某个时候删除[]。 –

+0

Duplicate - http://stackoverflow.com/questions/12513426/what-happens-when-delete-pointer-to-stack-object?lq=1 – user93353

回答

8

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

只有delete您分配的内容为new

+1

换句话说:如果你没有'新'这个对象,你不要没有它的所有权(除非相关文档另有说明),如果你没有它的所有权,你不应该释放它。 – cdhowie

+0

更糟糕的是,在某种程度上,“earth”是对动态分配对象的引用。假设其他作者是一个好公民,那么这个地球对象最终将被分配它的东西释放。在这里删除它,程序将在以后删除时失败。这很糟糕的原因是因为错误消息使得看起来错误在第二次删除。 “地球”分配代码的作者将不可避免地收到一个令人讨厌的电话或电子邮件,内容是“你的代码坏了!它正在下降核心。” –

相关问题