new和malloc的區(qū)別

  1. 屬性
  • new/delete是關(guān)鍵字 需要編譯器支持;
  • malloc/free是庫函數(shù),需要頭文件支持。

C++中new/delete不依賴任何語句就存在;但malloc/free需要引用"iostream"。但C語言中就不存在new/delete。

  1. 參數(shù)
  • new在使用時,無需指定內(nèi)存塊的大小
  • 但malloc需要顯式地指出所需內(nèi)存的尺寸
  1. 返回類型
  • new內(nèi)存分配成功時,嚴(yán)格返回對象類型的指針,是符合類型安全的操作符
  • malloc函數(shù)定義返回值為void*,即任何類型的指針,故需要強制類型轉(zhuǎn)換
  1. 自定義類型
  • 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)工作。
  1. 重載
  • new允許重載
  • malloc不可以
  1. 內(nèi)存區(qū)域
  • new從自由存儲區(qū)為對象動態(tài)分配內(nèi)存空間。
  • malloc從堆上動態(tài)分配內(nèi)存
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 16宿命:用概率思維提高你的勝算 以前的我是風(fēng)險厭惡者,不喜歡去冒險,但是人生放棄了冒險,也就放棄了無數(shù)的可能。 ...
    yichen大刀閱讀 8,131評論 0 4
  • 公元:2019年11月28日19時42分農(nóng)歷:二零一九年 十一月 初三日 戌時干支:己亥乙亥己巳甲戌當(dāng)月節(jié)氣:立冬...
    石放閱讀 7,515評論 0 2
  • 今天上午陪老媽看病,下午健身房跑步,晚上想想今天還沒有斷舍離,馬上做,衣架和旁邊的的布衣架,一看亂亂,又想想自己是...
    影子3623253閱讀 3,076評論 3 8

友情鏈接更多精彩內(nèi)容