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如何實現對象的動態內存管理,見示例。
class Obj { public: Obj() { cout << "Initialization" << endl; } ~Obj() { cout << "Destroy" << endl; } void Initialize() { cout << "Initialization" << endl; } void Destroy() { cout << "Destroy" << endl; } }; void UseMallocFree() { Obj *a = (Obj*)malloc(sizeof(obj)); a->Intialize(); // ... a->Destroy(); free(a); } void UseNewDelete() { Obj *a = new Obj; //... delete a; }
類Obj的函數Initialize模擬了構造函數的功能,函數Destroy模擬了析構函數的功能。函數UseMallocFree中,由於malloc/free不能執行構造函數與析構函數,必須調用成員函數Initialize和Destroy來完成初始化與清除工作。函數UseNewDelete則簡單得多。
這只是個例子,不會有人用malloc/free來創建類對象。另外,new和delete配套使用,new[]和delete[]配套使用。