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