在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整個...