1、new/delete是C++的操作符,而malloc/free是C中的函數。
2、new做兩件事,一是分配內存,二是調用類的構造函數;同樣,delete會調用類的析構函數和釋放內存。而malloc和free只是分配和釋放內存。
3、new建立的是一個對象,而malloc分配的是一塊內存;new建立的對象可以用成員函數訪問,不要直接訪問它的地址空間;malloc分配的是一塊內存區域,用指針訪問,可以在里面移動指針;new出來的指針是帶有類型信息的,而malloc返回的是void指針。
4、new/delete是保留字,不需要頭文件支持;malloc/free需要頭文件庫函數支持。
我們看一看malloc/free和new/delete如何實現對象的動態內存管理,見示例。
1 class Obj 2 { 3 public: 4 Obj() { cout << "Initialization" << endl; } 5 ~Obj() { cout << "Destroy" << endl; } 6 void Initialize() { cout << "Initialization" << endl; } 7 void Destroy() { cout << "Destroy" << endl; } 8 }; 9
10 void UseMallocFree() 11 { 12 Obj *a = (Obj*)malloc(sizeof(obj)); 13 a->Intialize(); 14 // ...
15 a->Destroy(); 16 free(a); 17 } 18
19 void UseNewDelete() 20 { 21 Obj *a = new Obj; 22 //...
23 delete a; 24 }
類Obj的函數Initialize模擬了構造函數的功能,函數Destroy模擬了析構函數的功能。函數UseMallocFree中,由於malloc/free不能執行構造函數與析構函數,必須調用成員函數Initialize和Destroy來完成初始化與清除工作。函數UseNewDelete則簡單得多。
這只是個例子,不會有人用malloc/free來創建類對象。另外,new和delete配套使用,new[]和delete[]配套使用。