一、本質區別
malloc/free是C/C++語言的標準庫函數,new/delete是C++的運算符。
對於用戶自定義的對象而言,用maloc/free沒法知足動態管理對象的要求。對象在建立的同時要自動執行構造函數,對象在消亡以前要自動執行析構函數。因爲malloc/free是庫函數而不是運算符,不在編譯器控制權限以內,不可以把執行構造函數和析構函數的任務強加於malloc/free。所以C++須要一個能完成動態內存分配和初始化工做的運算符new,以及一個能完成清理與釋放內存工做的運算符delete。
二、聯繫 既然new/delete的功能徹底覆蓋了malloc/free,爲何C++還保留malloc/free呢?由於C++程序常常要調用C函數,而C 程序只能用malloc/free管理動態內存。若是用free釋放「new建立的動態對象」,那麼該對象因沒法執行析構函數而可能致使程序出錯。若是用delete釋放「malloc申請的動態內存」,理論上講程序不會出錯,可是該程序的可讀性不好。因此new/delete,malloc/free必須配對使用。