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