定制自己的new和delete:operator new 和 operator delete
new和delete不同用法
基本用法
int * aptr = new int(10);
delete aptr, aptr = nullptr;
上面的代碼是我們最基本也是最常見(jiàn)的使用new和delete的方式,當(dāng)編譯器運(yùn)行int * aptr = new int(10); 這行代碼時(shí),其實(shí)是分為兩個(gè)步驟來(lái)執(zhí)行,第一步,調(diào)用operator new(size_t size) 分配內(nèi)存;第二步在分配的內(nèi)存上調(diào)用placement new(void * ptr) T(); “定位放置 new”,就是把對(duì)象構(gòu)建在指定的ptr指向的內(nèi)存上,換句話就是在指定的內(nèi)存上調(diào)用構(gòu)造函數(shù)。
概念區(qū)分
new operator 和 delete operator :new 和 delete 操作符(關(guān)鍵字),無(wú)法重載
operator new 和 operator delete:兩個(gè)函數(shù)用來(lái)服務(wù)于 new 和 delete 操作符,以及對(duì)應(yīng)的 operator new [] , operator delete [] 對(duì)應(yīng)于 new [] 和 delete []相關(guān)的數(shù)組操作;這兩個(gè)函數(shù)是可以被重載的,一般有全局默認(rèn)的函數(shù),自己也可以定義自己的,在定義C++類的時(shí)候也可以為某個(gè)class定制對(duì)應(yīng)的 operator new 和 operator delete
全局的operator new 和 operator delete函數(shù)
全局默認(rèn)operator new 函數(shù):
void * operator new(std::size_t count)