new和malloc的區別詳細總結

2021-10-24 08:40:53 字數 777 閱讀 1062

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