關(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)格說(shuō)來(lái)用malloc不能算是新建了一個(gè)對(duì)象,只能說(shuō)是分配了一塊與該類對(duì)象匹配的內(nèi)存而已,與構(gòu)造函數(shù)無(wú)關(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。
|
|