malloc
是c中的函式,需要宣告特定的標頭檔案。而new
是c++中的關鍵字(操作符),它本身不是函式,所以不依賴於標頭檔案,c++譯器就可以把new
編譯成目標**.
1、申請記憶體所在位置不同
new
操作符從自由儲存區分配記憶體空間,而malloc函式從堆上分配記憶體,自由儲存區不同於堆,但是都需要手動釋放,我們可以忽略這一點.
2、申請方式不同
new
操作符申請記憶體是按照物件申請,會進行呼叫物件的建構函式。而malloc則需要顯式地指出所需記憶體的尺寸,並沒有呼叫物件的建構函式。
3、返回值不同
new
返回的是申請物件型別的指標,malloc
返回的是指向那塊記憶體的(void*)
型別的指標,一般進行型別轉換。
4、分配失敗時
new
記憶體分配失敗時,會丟擲bac_alloc異常。malloc
分配記憶體失敗時返回null
。
5、過載
c++允許過載new/delete操作符,特別的,布局new的就不需要為物件分配記憶體,而是指定了乙個位址作為記憶體起始區域,new在這段記憶體上為物件呼叫建構函式完成初始化工作,並返回此位址。而malloc不允許過載
6、釋放方式不同
delete會呼叫物件的析構函式,而free只是釋放空間。
new和malloc的區別
1 new 是c 中的操作符,malloc是c 中的乙個函式 2 new 不止是分配記憶體,而且會呼叫類的建構函式,同理delete會呼叫類的析構函式,而malloc則只分配記憶體,不會進行初始化類成員的工作,同樣free也不會呼叫析構函式 3 記憶體洩漏對於malloc或者new都可以檢查出來的,...
malloc和new的區別
1,malloc與free是c c語言的標準庫函式,new delete是c 的運算子。它們都可用於申請動態記憶體和釋放記憶體。2,對於非內部資料型別的物件而言,光用maloc free無法滿足動態物件的要求。物件在建立的同時要自動執行建構函式,物件在消亡之前要自動執行析構函式。由於malloc f...
new 和 malloc 的區別
new 和 malloc 的區別 1.malloc與free是c c語言的標準庫函式,new delete是c 的運算子。它們都可用於申請動態記憶體和釋放記憶體。2.對於非內部資料型別的物件而言,光用maloc free無法滿足動態物件的要求。物件在建立的同時要自動執行建構函式,物件在消亡之前要自動...