(本文參考于網上)
首先兩者都可用于申請動態內存和釋放內存。
對于非內部數據類型的對象而言,只用malloc/free無法滿足動態對象的要求。對象在創建的同時要自動執行構造函數,對象在消亡之前要自動執行析構函數。由于malloc/free是庫函數而不是運算符,不在編譯器控制權限之內,不能夠把執行構造函數和析構函數的任務強加給malloc/free。
因此C++語言需要一個能完成動態內存分配和初始化工作的運算符new,以及一個能完成清理與釋放內存工作的運算符delete。new/delete不是庫函數而是運算符
malloc 是C語言的標準庫函數,它實現了在堆內存管理中進行按需分配的機制,但是它不提供在C++中對像構造的支持,而new 則是一個 在C++中同時完成堆內存按需分配支持和對像構造功能的運算符。
?
對于這兩者需要注意的是:
(1)內存分配可能失敗,所以在動態分配之后需要檢驗一下是否分配成功。
(2)在釋放內存后,需要將指針置空,否則可能變成“野”指針。