及參考答案(上))
C++ 中為什么要有 new/delete?它們與 malloc/free 的聯(lián)系和區(qū)別是什么?C++ 之所以引入 new 和 delete,核心原因在于 malloc 和 free 是 C 語言標(biāo)準(zhǔn)庫提供的內(nèi)存管理函數(shù),僅負(fù)責(zé)原始堆內(nèi)存的分配與釋放,不具備面向?qū)ο缶幊趟匦璧膶?duì)象生命周期管理能力。C++ 的核心特性之一是類與對(duì)象,對(duì)象不僅僅是一塊連續(xù)內(nèi)存,還包含構(gòu)造與析構(gòu)邏輯,malloc 只會(huì)分配一塊未初始化的裸內(nèi)存,不會(huì)自動(dòng)調(diào)用類的構(gòu)造函數(shù)來初始化成員變量、申請(qǐng)子資源;free 只會(huì)回收內(nèi)存空間,不會(huì)調(diào)用析構(gòu)函數(shù)釋放對(duì)象持有的文件句柄、堆內(nèi)存、網(wǎng)絡(luò)連接等資源,極易造成資源泄漏。new 和 delete 將內(nèi)存空間分配、對(duì)象構(gòu)造、內(nèi)存回收、對(duì)象析構(gòu)四個(gè)動(dòng)作整合在一起,適配 C++ 面向?qū)ο蟮脑O(shè)計(jì)范式,同時(shí)兼容基礎(chǔ)內(nèi)置類型的內(nèi)存管理,是 C++ 原生的內(nèi)存管理機(jī)制。malloc 和 free 由 stdlib.h 提供,屬于庫函數(shù),new 和 delete 是 C++ 內(nèi)置運(yùn)算符,編譯器直接識(shí)別處理,不是普通函數(shù)調(diào)用。二者存在底層聯(lián)系,默認(rèn)情況下全局 new 底層實(shí)現(xiàn)會(huì)調(diào)用 malloc 申請(qǐng)內(nèi)存,全局 delete 底層會(huì)調(diào)用 free 回收內(nèi)存,但這個(gè)關(guān)聯(lián)不是強(qiáng)制綁定的,開發(fā)者可以重載全局 new/delete 或者類專屬的 operator new/operator delete,替換底層內(nèi)存分配邏輯,不再依賴 malloc/free。在核心差異層面,首先是處理對(duì)象生命周期的能力,new 分配內(nèi)存后自動(dòng)調(diào)用構(gòu)造函數(shù)初始化對(duì)象,delete 釋放內(nèi)存前自動(dòng)調(diào)用析構(gòu)函數(shù)清理資源;malloc 僅分配未經(jīng)初始化的原始內(nèi)存塊,free 直接回收內(nèi)存,不會(huì)執(zhí)行任何構(gòu)造、析構(gòu)邏輯。其