一、new/delete是C++的操做符,而malloc/free是C中的函數。函數
二、new作兩件事,一是分配內存,二是調用類的構造函數;一樣,delete會調用類的析構函數和釋放內存。而malloc和free只是分配和釋放內存。spa
三、new創建的是一個對象,而malloc分配的是一塊內存;new創建的對象能夠用成員函數訪問,不要直接訪問它的地址空間;malloc分配的是一塊內存區域,用指針訪問,能夠在裏面移動指針;new出來的指針是帶有類型信息的,而malloc返回的是void指針。指針
四、new/delete是保留字,不須要頭文件支持;malloc/free須要頭文件庫函數支持。code
咱們看一看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則簡單得多。blog
這只是個例子,不會有人用malloc/free來建立類對象。另外,new和delete配套使用,new[]和delete[]配套使用。內存