Posted on 2007-08-13 10:12
寶杉 閱讀(417)
評論(0) 編輯 收藏 引用 所屬分類:
C++
free和delete
只是把指針所指的內(nèi)存給釋放掉,但并沒有把指針本身干掉。
注意:
(1)指針消亡了,并不表示它所指的內(nèi)存會被自動釋放。
(2)內(nèi)存被釋放了,并不表示指針會消亡或者成了NULL指針。
比較
malloc和free:無法滿足動態(tài)對象的要求。對象在創(chuàng)建同時進行構(gòu)造,消亡同時析構(gòu)。
malloc free是庫函數(shù),不是運算符,不受編譯器控制。
new和delete:不是庫函數(shù),能動態(tài)內(nèi)存分配和清理內(nèi)存。
內(nèi)存耗盡
內(nèi)存耗盡時new和malloc返回NULL。但在WIN32下,使用虛擬內(nèi)存,不會耗盡的。
處理內(nèi)存耗盡大概有兩種。
A *a = new A;
1 一處內(nèi)存申請
if(a == NULL)
{
return;
}
2 如果有多處申請內(nèi)存,則
if(a == NULL)
{
cout << “Memory Exhausted” << endl;
exit(1);
}
new與delete使用要點
1 new內(nèi)置了sizeof、類型轉(zhuǎn)換和類型安全檢查功能。
2 new在創(chuàng)建非內(nèi)部數(shù)據(jù)類型的動態(tài)對象的同時完成了初始化工作。
3 對象有多個構(gòu)造函數(shù),那么new的語句也可以有多種形式。
例如:diary files\obj.txt
4 如果用new創(chuàng)建對象數(shù)組,那么只能使用對象的無參數(shù)構(gòu)造函數(shù)。例如
Obj *objects = new Obj[100]; // 創(chuàng)建100個動態(tài)對象
不能寫成
Obj *objects = new Obj[100](1);// 創(chuàng)建100個動態(tài)對象的同時賦初值1
5在用delete釋放對象數(shù)組時,留意不要丟了符號‘[]’。例如
delete []objects; // 正確的用法
delete objects; // 錯誤的用法
后者相當(dāng)于delete objects[0],漏掉了另外99個對象。