malloc與new的區別

2021-09-25 19:33:29 字數 1089 閱讀 3250

從五個方面來討論這個問題

1. 記憶體的開闢位置與開闢記憶體時的功能

malloc與new的記憶體開闢區域都是 堆區,但是malloc只負責開闢記憶體,之後的初始化需要使用者來進行,而new則可以在開闢記憶體的同時進行初始化操作new int。

如new int(10);表示在堆上開闢了乙個4位元組的int整形記憶體,初始值是10,再如new int10;表示在堆上開闢了乙個包含10個整形元素的陣列,初始值都為0

不僅如此,當使用類型別初始化的時候:

test *p = new test();

這個語句不僅會在堆上開闢test型別大小的一塊記憶體,還會呼叫test類的預設建構函式構造乙個物件出來,這些都是malloc辦不到的!

2. 返回值的型別

malloc的返回值型別是void *,所以使用者在使用時需要對其型別進行強轉,轉化為所需要的型別。

new在開闢記憶體的時候指定返回值的型別,因此,返回的是指定型別的位址。

3.記憶體開闢失敗

當記憶體開闢失敗

malloc返回null;

new則是會丟擲乙個bad_alloc型別的異常,需要捕捉這個異常才能知道記憶體是否開闢成功。

4.記憶體的釋放

malloc ——》 free

new ——》delete new ——》 delete

delete比free多一項功能就是在釋放記憶體之前,還可以析構指標指向的物件,new和delete配對使用,new和delete配對使用,盡量不要交叉使用,以免產生不可預期的問題。

5.種類

malloc只有這麼一種開闢記憶體的方式

而new有四種1.普通new(開闢記憶體失敗,丟擲bad_alloc型別的異常)

2.nothrow型別的new

3.const new

4.定位new

**注意:在c++盡量不使用memcpy與realloc函式,這兩個函式只是進行記憶體的值拷貝,也就是我們說的物件的淺拷貝,當物件具有外部資源時容易出現淺拷貝的問題。

new與malloc的區別

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

new與malloc的區別

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

Malloc與new 的區別

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