new delete與malloc free的區別

2021-06-26 11:31:04 字數 911 閱讀 2737

new/delete與malloc/free的區別

1、new/delete在管理記憶體的同時會呼叫類的建構函式和析構函式。

malloc/free僅僅實現了記憶體的分配和釋放,沒有呼叫類的建構函式和析構函式。

2、new/delete是c++語言的運算子關鍵字。

malloc/free是c/c++語言的標準庫函式。——在使用的時候需要標頭檔案庫函式支援。

3、通過new建立的物件具有型別,而malloc的返回值為void*,需要進行強制型別轉換。

classa   *a= new classa   ;

classa   *a=( classa   *a)malloc(sizeof(  classa ));

4、new申請記憶體失敗時,會呼叫new_handler處理函式。

而malloc申請記憶體失敗時,僅僅返回null,不會進行任何善後處理。

new的三種形態

classa   *a= new classa   ;

這個語句,完成了三個操作:

1、通過operator new 申請記憶體

2、使用placement new呼叫建構函式(簡單型別如int等 ,忽略此步)

3、返回記憶體指標

在程式設計時,new的表示式中使用,則在delete表示式中也使用;

在new的表示式中沒有使用,則在delete表示式中一定不要使用。

但是在遇到typedef型別物件時,要清楚知道該用哪一種delete。

比如:typedef int  arrimatrix[4];——————定義了int 型大小為4的乙個陣列的別名 :arrimatrix;

int * parrimatrix=new arrimatrix;

delelte arrimatrix;

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 無法滿足動態物件的要求。物件在建立的同時要自動執行建構函式,物件消亡之前要自動執行析...