小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

【C++】new 與 malloc

 精品唯居 2022-12-23 發(fā)布于北京

關(guān)于new,這一篇文章較好,較明白得解釋了operator new 和 new operator。

https://blog.csdn.net/nishisiyuetian/article/details/81702180

 

new和malloc的區(qū)別

 

new(這里是new operator)的功能是在堆區(qū)新建一個(gè)對(duì)象,并返回該對(duì)象的指針(類型是該對(duì)象類型)。new操作符在生成一個(gè)對(duì)象的時(shí)候一般分兩步,調(diào)用operator new0函數(shù)分配內(nèi)存(有的編譯器會(huì)在未重載operator new的時(shí)候用malloc實(shí)現(xiàn) operator new),然后再用構(gòu)造函數(shù)初始化對(duì)象。

所謂的【新建對(duì)象】的意思就是,將調(diào)用該類的構(gòu)造函數(shù),因?yàn)槿绻粯?gòu)造的話,就不能稱之為一個(gè)對(duì)象。同樣的,用delete去釋放一個(gè)堆區(qū)的對(duì)象,會(huì)調(diào)用該對(duì)象的析構(gòu)函數(shù)。

 

而malloc只是機(jī)械的分配一塊內(nèi)存(類型是void*),如果用mallco在堆區(qū)創(chuàng)建一個(gè)對(duì)象的話,是不會(huì)調(diào)用構(gòu)造函數(shù)的嚴(yán)格說來用malloc不能算是新建了一個(gè)對(duì)象,只能說是分配了一塊與該類對(duì)象匹配的內(nèi)存而已,與構(gòu)造函數(shù)無關(guān)。用free去釋放一個(gè)堆區(qū)的對(duì)象,當(dāng)然不會(huì)調(diào)用該對(duì)象的析構(gòu)函數(shù)。

  
參考鏈接:https://www.zhihu.com/question/30115922/answer/46860025
 
另外new內(nèi)存分配失敗時(shí),會(huì)拋出bac_alloc異常,它不會(huì)返回NULL;malloc分配內(nèi)存失敗時(shí)返回NULL。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多