malloc free與new delete的區別

2021-06-19 05:22:14 字數 613 閱讀 5460

malloc與free是c/c++語言的標準庫函式,而new/delete是c++的運算子。它們都可用於申請動態記憶體和釋放記憶體。

對於非內部資料型別(基本資料型別)的物件而言,光用maloc/free無法滿足動態物件的要求。物件在建立的同時要自動執行建構函式,物件在消亡之前要自動執行析構函式。由於malloc/free是庫函式而不是運算子,不在編譯器控制許可權之內,不能夠把執行建構函式和析構函式的任務強加於malloc/free。

因此c++語言需要乙個能完成動態記憶體分配和初始化工作的運算子new,以及乙個能完成清理與釋放記憶體工作的運算子delete,new可以理解為是在malloc申請的記憶體呼叫建構函式,再返回該記憶體的指標。注意new/delete不是庫函式。

1、執行過程的區別:new呼叫建構函式,malloc不會呼叫。

2、用法的區別:new不用強制型別轉換,malloc需要。

3、刪除操作:使用malloc可以使用delete刪除,也可以使用free,兩個都可以的。不過new只能使用delete刪除。free與delete區別在於後者可以執行析構,所以一般不會用free去釋放new開闢的記憶體。

4、注意事項:刪除陣列的記憶體空間要用delete運算子,用delete是個錯誤。delete執行是呼叫析構函式。

malloc free與new delete的區別

相同點 都可用於申請動態記憶體和釋放記憶體 不同點 1 操作物件有所不同。malloc與free是c c 語言的標準庫函式,new delete 是c 的運算子。對於非內部資料類的物件而言,光用maloc free 無法滿足動態物件的要求。物件在建立的同時要自動執行建構函式,物件消亡之前要自動執行析...

malloc free與new delete的區別

相同點 都可用於申請動態記憶體和釋放記憶體 不同點 1 操作物件有所不同。malloc與free是c c 語言的標準庫函式,new delete 是c 的運算子。對於非內部資料類的物件而言,光用maloc free 無法滿足動態物件的要求。物件在建立的同時要自動執行建構函式,物件消亡之前要自動執行析...

malloc free與new delete的區別

相同點 都可用於申請動態記憶體和釋放記憶體 不同點 1 操作物件有所不同。malloc與free是c c 語言的標準庫函式,new delete 是c 的運算子。對於非內部資料類的物件而言,光用maloc free 無法滿足動態物件的要求。物件在建立的同時要自動執行建構函式,物件消亡之前要自動執行析...