C C 指標刪除的幾個細節

2021-07-24 12:52:02 字數 925 閱讀 4802

在c/c++中,當指標需要刪除時,對於new的指標,呼叫delete就可以刪除  比如 :

int* p = new int(17);  

delete p;

有時候為了避免使用錯誤,一般在delete之後,將p置為null,即:

int* p = new int(17);  

delete p;

p = null;

有時候為了方便及統一處理指標的申請及釋放,一般放到將刪除操作放到乙個方法中去做,即:

int* p = new int(17);  

void deletep(int* a)

但是這樣對a賦值為null,對於呼叫的指標p來說,雖然p占用的記憶體被釋放了,但是p這個指標還是指向delete之前的位址,即p != null ,所以某些通過根據 p是否為null進行判斷而執行的操作就不對了,比如 :

if ( p != null)  

上面的做法就不對了 

有乙個方法可以解決,就是指標釋放的時候,傳遞進去的不是指標,而是指標的引用,即 :

int* p = new int(17);  

void deletep(int*& a)

這樣呼叫p就變為null了,上面的根據p是否為null進行的判斷也就正確了 

有時候這種操作也可以通過乙個巨集定義去完成,即 :

#define cc_safe_delete(p)   if(p)

因為巨集定義執行的時候,是到呼叫處進行展開,並不像方法那樣做,所以通過巨集定義進行刪除後,呼叫指標p也就變成null了。

C C 指標記憶體分配小細節

char pc null pc new char 0 pc 0 1 相信初學者看見上面這段 都會覺得奇怪,new char n 中的n指定給指標變數分配多少記憶體空間,而n 0時代表什麼呢?其實上面的程式編譯 執行都是正確的。因為編譯器識別到指定大小為0時,會自動為其分配1byte的記憶體空間。嘗試...

常用的幾個指標刪除器

這裡主要是介紹乙個常用的指標刪除器的使用,主要是為了便於前文中 art ptr 請參考 http blog.csdn.net hello wyq archive 2006 07 07 888703.aspx 的使用,希望能夠一些啟發,便於日後的交流和跟進。author wang yanqing mo...

servlet的幾個細節

1 客戶端多次請求servlet,通常情況下,伺服器只會建立乙個servlet物件,也就是說servlet例項物件一旦建立,就會一直在記憶體中,為其他的後面的請求服務,直到web容器退出,才會銷毀,注意servlet物件不是伺服器啟動的時候建立的,而是在客戶端請求的時候才建立的。在servlet整個...