假設我有一個指向MyClass的:刪除指針並將指針設置爲NULL有什麼區別?
MyClass *myPointer = new MyClass();
是什麼delete myPointer;
和myPointer = NULL;
之間的區別?
感謝
假設我有一個指向MyClass的:刪除指針並將指針設置爲NULL有什麼區別?
MyClass *myPointer = new MyClass();
是什麼delete myPointer;
和myPointer = NULL;
之間的區別?
感謝
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
,這是現代的方式內存管理。
delete myPointer
釋放分配的空間,但讓您與懸掛指針(指向未分配的東西)。
myPointer = NULL
設置你的指針,用來表示(指着什麼)的概念,但給你一個內存泄漏回報爲你不取消分配現在是「丟失」的存儲器中的值。如果不濫用內存泄漏可能不會太有害,但總是被視爲一種編程錯誤。
您可以用下面的習慣,以防止將來出現問題:
delete myPointer;
myPointer = NULL;
開爾文應該使用的成語是一個智能指針。 – rubenvb
我說過可能...但我不應該,你的建議當然更好。 –
簡而言之,刪除用於刪除存儲針對先前使用新關鍵字分配的對象。對象的析構函數在對象的內存被釋放之前調用(如果對象具有析構函數)。
調用delete後,取消引用已釋放內存的指針(通常)不具有NULL值,但對它們的任何操作都會導致錯誤。
將指針設置爲NULL意味着它不會取消引用任何內容,但爲對象分配的內存仍然存在。
刪除刪除對象後,有時可能會將指針設置爲NULL,以便可以檢查它們是否仍然有效(取消引用一致的內存區域)。
不刪除/釋放分配的內存是內存泄漏 – UnholySheep