2016-11-30 70 views

回答

8

delete myPointer去分配內存,但留下myPointer變量的值,它是指向一些垃圾地址。

myPointer = NULL只設置myPointer的值設置爲NULL指針,可能泄漏的內存,如果你不刪除其他指針,它指向相同的地址myPointer

在你應該使用這兩個字符串理想世界中,像這樣的:

delete myPointer; // free memory 
myPointer = nullptr; // setting value to zero, signalizing, that this is empty pointer 

但總體而言,使用std::unique_ptr,這是現代的方式內存管理。

2

delete myPointer釋放分配的空間,但讓您與懸掛指針(指向未分配的東西)。

myPointer = NULL設置你的指針,用來表示(指着什麼)的概念,但給你一個內存泄漏回報爲你不取消分配現在是「丟失」的存儲器中的值。如果不濫用內存泄漏可能不會太有害,但總是被視爲一種編程錯誤。

您可以用下面的習慣,以防止將來出現問題:

delete myPointer; 
myPointer = NULL; 
+0

開爾文應該使用的成語是一個智能指針。 – rubenvb

+0

我說過可能...但我不應該,你的建議當然更好。 –

1

簡而言之,刪除用於刪除存儲針對先前使用關鍵字分配的對象。對象的析構函數在對象的內存被釋放之前調用(如果對象具有析構函數)。

調用delete後,取消引用已釋放內存的指針(通常)不具有NULL值,但對它們的任何操作都會導致錯誤。

將指針設置爲NULL意味着它不會取消引用任何內容,但爲對象分配的內存仍然存在。

刪除刪除對象後,有時可能會將指針設置爲NULL,以便可以檢查它們是否仍然有效(取消引用一致的內存區域)。