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[]配套使用。