只是一個簡單的問題:如果我沒有爲它指定一個新值,我是否需要刪除一個指針?
我是否需要刪除一個指針,如果我沒有實際分配一個新的值呢?
如果創建一個指向我所做的,然後遞給了一些參考,像這樣:
Planet *planetPointer;
planetPointer = &earth;
我需要刪除這個指針或可我只是將它設置爲空?
只是一個簡單的問題:如果我沒有爲它指定一個新值,我是否需要刪除一個指針?
我是否需要刪除一個指針,如果我沒有實際分配一個新的值呢?
如果創建一個指向我所做的,然後遞給了一些參考,像這樣:
Planet *planetPointer;
planetPointer = &earth;
我需要刪除這個指針或可我只是將它設置爲空?
你不需要刪除它,而且,你不應該刪除它。如果earth
是一個自動對象,它將被自動釋放。所以通過手動刪除指向它的指針,你會進入未定義的行爲。
只有delete
您分配的內容爲new
。
換句話說:如果你沒有'新'這個對象,你不要沒有它的所有權(除非相關文檔另有說明),如果你沒有它的所有權,你不應該釋放它。 – cdhowie
更糟糕的是,在某種程度上,「earth」是對動態分配對象的引用。假設其他作者是一個好公民,那麼這個地球對象最終將被分配它的東西釋放。在這裏刪除它,程序將在以後刪除時失敗。這很糟糕的原因是因爲錯誤消息使得看起來錯誤在第二次刪除。 「地球」分配代碼的作者將不可避免地收到一個令人討厭的電話或電子郵件,內容是「你的代碼壞了!它正在下降核心。」 –
只有'刪除'你'新'。 – chris
要比@chris更迂腐:規則是,對於* every * new,您應該在* some *處有一個刪除,並且對於每個新的[],您應該在某個時候刪除[]。 –
Duplicate - http://stackoverflow.com/questions/12513426/what-happens-when-delete-pointer-to-stack-object?lq=1 – user93353