2012-12-04 42 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」是對動態分配對象的引用。假設其他作者是一個好公民,那麼這個地球對象最終將被分配它的東西釋放。在這裏刪除它,程序將在以後刪除時失敗。這很糟糕的原因是因爲錯誤消息使得看起來錯誤在第二次刪除。 「地球」分配代碼的作者將不可避免地收到一個令人討厭的電話或電子郵件,內容是「你的代碼壞了!它正在下降核心。」 –

相關問題