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