我們都知道,在C++中,用new聲明的指針變量,都要delete。除非你完完全全使用智能指針,而不用擔心內存洩露的問題。
如果你是來自C Sharp陣營,那麼也許你習慣於托管代碼帶來的好處,垃圾內存回收機制。但是C++中,需要手動進行釋放,誰分配誰釋放。
首先,我要強調的一點就是delete是釋放指針指向的內存,而並不是指針本身所占有的內存。 慢慢品味這句話。
我們試圖寫下如下的代碼:
#include
using namespace std;
int main()
{
int *p = new int(10);
delete p;
delete p;
return 0;
}
編譯的時候沒有錯誤,但是運行的時候就會崩潰。
我們試圖調試程序,但令我吃驚的是無法把delete語句設上斷點,求大神指導。
我們試圖修改上面的代碼:把delete後的指針賦值為null
#include
using namespace std;
int main()
{
int *p = new int(10);
delete p;
p = NULL;
delete p;
return 0;
}
編譯成功,運行成功。
因此,為了防止delete兩次同一個指針而導致程序崩潰,請把delete後的指針賦值為NULL。
記住一點:
C++ 保證:刪除 0 值的指針是安全的。