c 中的動態記憶體管理(new delete)

2021-08-20 06:34:35 字數 1288 閱讀 7477

int *p1 = new

int; //動態分配4個位元組

int *p2 = new

int(1); //動態分配4個位元組,初始化為1

char *p3 = new

char[3]; //動態分配3個位元組(3個char型別)

delete p1;

delete p2;

deletep3;

注意:new/delete,和new/delete是匹配使用的。

void *operator

new(size_t size);

void

operator

delete(size_t size);

void *operator

new(size_t size);

void

operator

delete(size_t size);

1、operator new /operator delete/ oerator new/operator delete和malloc/free用法一樣2、他們只負責分配空間/釋放空間,不會呼叫建構函式來初始化/析構函式來清理物件。3、實際operator new 和 operator delete只是malloc 和free的一層分裝。

new/delete和malloc/free的區別

malloc分配記憶體空間前需要計算分配記憶體大小;而new能夠自動分配記憶體空間;

malloc是底層函式,其函式返回值型別為void *;而new運算子呼叫無參建構函式,故返回值為對應物件的指標;

malloc函式型別不是安全的,編譯器不對其進行型別轉換、型別安全的相關檢查。malloc申請空間後,不會對其初始化,要單獨初始化;而new型別是安全的,因為它內建了sizeof、型別轉換和型別安全檢查功能,且在建立物件時,就完成了初始化工作,一般初始化呼叫無參建構函式;

operator new對應於malloc,且operator new可以過載,可以自定義記憶體分配策略,甚至不做記憶體分配,甚至分配到非記憶體裝置上;但malloc不能。

free只進行釋放空間;而delete則釋放空間的同時呼叫析構函式。此外delete使用是注意釋放陣列的方法為delete 陣列名。

c 中的動態記憶體管理

c 中的動態記憶體管理問題 c 中使用new和delete實現動態記憶體管理。new和delete實現動態管理物件,new和delete實現動態管理物件陣列。c 中的new和delete運算子均使用我們c中學過的malloc和delete函式實現動態記憶體的開闢。首先,先簡單介紹下c中的幾個動態記憶...

C 中的動態記憶體管理

相同點 都可用於申請動態記憶體和釋放記憶體 不同點 1 操作物件不同 malloc free是c c語言的標準庫函式,new delete是c 的運算子,對於非內部資料型別的物件而言,只有malloc free是無法滿足動態物件的要求的。因為物件在建立的時候會自動呼叫建構函式,物件消亡時會自動呼叫析...

C 動態記憶體管理

我們都知道在c 中可以用new malloc動態分配記憶體空間,delete free釋放動態開闢的記憶體空間。1.那麼既然c 中有了可以動態開闢記憶體的函式為什麼又要有new delete呢?c 中的malloc free是繼承c語言中的malloc free,它的用法和在c語言中的用法一模一樣。...