程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 你所不知道的事兒

你所不知道的事兒

編輯:關於C++

我們都知道,在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 值的指針是安全的。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved