new/delete 和 malloc/free 的區(qū)別

1.malloc/free是C/C++語言的標(biāo)準(zhǔn)庫函數(shù)垢乙,new/delete是C++的運(yùn)算符。它們都可用于申請動態(tài)內(nèi)存和釋放內(nèi)存语卤。但是new能夠自動分配空間大小追逮,而malloc需要計算字節(jié)數(shù)。

2.對于非內(nèi)部數(shù)據(jù)類型的對象而言粹舵,光用maloc/free無法滿足動態(tài)對象的要求钮孵。對象在創(chuàng)建的同時要自動執(zhí)行構(gòu)造函數(shù),對象在消亡之前要自動執(zhí)行析構(gòu)函數(shù)眼滤。由于malloc/free是庫函數(shù)而不是運(yùn)算符巴席,不在編譯器控制權(quán)限之內(nèi),不能夠把執(zhí)行構(gòu)造函數(shù)和析構(gòu)函數(shù)的任務(wù)強(qiáng)加于malloc/free诅需。
因此C++語言需要一個能完成動態(tài)內(nèi)存分配和初始化工作的運(yùn)算符new漾唉,以及一個能完成清理與釋放內(nèi)存工作的運(yùn)算符delete。注意new/delete不是庫函數(shù)堰塌。---簡而言之 new/delete能進(jìn)行對對象進(jìn)行構(gòu)造和析構(gòu)函數(shù)的調(diào)用進(jìn)而對內(nèi)存進(jìn)行更加詳細(xì)的工作赵刑,而malloc/free不能。

3.new是類型安全的场刑,而malloc不是般此,比如:
int* p = new float[2]; // 編譯時指出錯誤
int* p = malloc(2*sizeof(float)); // 編譯時無法指出錯誤
new operator 由兩步構(gòu)成,分別是 operator new 和 construct

4.返回值摇邦。malloc分配失敗時恤煞,返回的是空指針。1993年前施籍,c++一直要求在內(nèi)存分配失敗時operator? new要返回0居扒,現(xiàn)在則是要求operator? new拋出std::bad_alloc異常。很多c++程序是在編譯器開始支持新規(guī)范前寫的丑慎。c++標(biāo)準(zhǔn)委員會不想放棄那些已有的遵循返回0規(guī)范的代碼喜喂,所以他們提供了另外形式的operator? new(以及operator? new[])以繼續(xù)提供返回0功能。這些形式被稱為“無拋出”竿裂,因?yàn)樗麄儧]用過一個throw玉吁,而是在使用new的入口點(diǎn)采用了nothrow對象:

class?? widget?? {?? ...?? };
widget?? *pw1?? =?? new?? widget;//?? 分配失敗拋出std::bad_alloc
if?? (pw1?? ==?? 0)?? ... //?? 這個檢查一定失敗
widget?? *pw2?? =?? new?? (nothrow)?? widget;?? //?? 若分配失敗返回0
if?? (pw2?? ==?? 0)?? ... //?? 這個檢查可能會成功

聯(lián)系:

既然new/delete的功能完全覆蓋了malloc/free,為什么C++還保留malloc/free呢腻异?因?yàn)镃++程序經(jīng)常要調(diào)用C函數(shù)进副,而C程序只能用malloc/free管理動態(tài)內(nèi)存。如果用free釋放“new創(chuàng)建的動態(tài)對象”悔常,那么該對象因無法執(zhí)行析構(gòu)函數(shù)而可能導(dǎo)致程序出錯影斑。如果用delete釋放“malloc申請的動態(tài)內(nèi)存”给赞,理論上講程序不會出錯,但是該程序的可讀性很差矫户。所以new/delete片迅,malloc/free必須配對使用。

NULL指針皆辽、零指針柑蛇、野指針:參見此處

參考:http://www.cnblogs.com/biyeymyhjob/archive/2012/07/16/2593754.html
? ? ? ? ?http://blog.csdn.net/u014082714/article/details/45097875

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末驱闷,一起剝皮案震驚了整個濱河市耻台,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌遗嗽,老刑警劉巖粘我,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鼓蜒,死亡現(xiàn)場離奇詭異痹换,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)都弹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進(jìn)店門娇豫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人畅厢,你說我怎么就攤上這事冯痢。” “怎么了框杜?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵浦楣,是天一觀的道長。 經(jīng)常有香客問我咪辱,道長振劳,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任油狂,我火速辦了婚禮历恐,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘专筷。我一直安慰自己弱贼,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布磷蛹。 她就那樣靜靜地躺著吮旅,像睡著了一般。 火紅的嫁衣襯著肌膚如雪味咳。 梳的紋絲不亂的頭發(fā)上庇勃,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天氛什,我揣著相機(jī)與錄音,去河邊找鬼匪凉。 笑死枪眉,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的再层。 我是一名探鬼主播贸铜,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼聂受!你這毒婦竟也來了蒿秦?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤蛋济,失蹤者是張志新(化名)和其女友劉穎棍鳖,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體碗旅,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡渡处,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了祟辟。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片医瘫。...
    茶點(diǎn)故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖旧困,靈堂內(nèi)的尸體忽然破棺而出醇份,到底是詐尸還是另有隱情,我是刑警寧澤吼具,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布僚纷,位于F島的核電站,受9級特大地震影響拗盒,放射性物質(zhì)發(fā)生泄漏怖竭。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一锣咒、第九天 我趴在偏房一處隱蔽的房頂上張望侵状。 院中可真熱鬧,春花似錦毅整、人聲如沸趣兄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽艇潭。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蹋凝,已是汗流浹背鲁纠。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留鳍寂,地道東北人改含。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像迄汛,于是被迫代替她去往敵國和親捍壤。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評論 2 348

推薦閱讀更多精彩內(nèi)容