- 屬性
- new/delete是關(guān)鍵字 需要編譯器支持;
- malloc/free是庫函數(shù),需要頭文件支持。
C++中new/delete不依賴任何語句就存在;但malloc/free需要引用"iostream"。但C語言中就不存在new/delete。
- 參數(shù)
- new在使用時,無需指定內(nèi)存塊的大小
- 但malloc需要顯式地指出所需內(nèi)存的尺寸
- 返回類型
- new內(nèi)存分配成功時,嚴(yán)格返回對象類型的指針,是符合類型安全的操作符
- malloc函數(shù)定義返回值為void*,即任何類型的指針,故需要強制類型轉(zhuǎn)換
- 自定義類型
- new會先調(diào)用operator new函數(shù),申請足夠的內(nèi)存(通常底層使用malloc實現(xiàn))。然后調(diào)用類型的構(gòu)造函數(shù),初始化成員變量,最后返回自定義類型指針
例如在創(chuàng)建如下結(jié)點的鏈表時
typedef struct node{
string word;
struct node* next;
}Node,*List;
int main
{
string a ="123456";
...... // 為鏈表節(jié)點賦值
}
- 使用malloc分配空間會報錯
Link p = (Link)malloc(sizeof(Node));
p->word = a;
- 而使用new則會正常運行
Link p =new Node;
p->word =a;
- malloc是庫函數(shù),只能動態(tài)的申請和釋放內(nèi)存,無法強制要求其做自定義類型對象構(gòu)造和析構(gòu)工作。
- 重載
- new允許重載
- malloc不可以
- 內(nèi)存區(qū)域
- new從自由存儲區(qū)為對象動態(tài)分配內(nèi)存空間。
- malloc從堆上動態(tài)分配內(nèi)存