今天看了大名鼎鼎的Scott Meyers所著的〈effective c++〉和〈more effective c++〉中關(guān)于new和delete的介紹,驚訝不已,大師果然名不虛傳,研究的如此細(xì)致、透徹,讓我這個(gè)菜鳥受益非淺(竊喜,呵呵)。
在C++中new operator與operator new非一回事也,new operator(即所謂的new expression)乃語言內(nèi)建,咱們是沒法改變其行為的,當(dāng)你寫string *ps = new string("Hands up!")時(shí),你所使用的new是所謂的new operator,它其實(shí)干了兩件事:一、分配足夠的內(nèi)存(實(shí)際大小是大于所創(chuàng)建的對象大小)二、調(diào)用對象構(gòu)造函數(shù),new operator永遠(yuǎn)干這兩件事。上面的那段代碼大約反映以下的行為:
void *mem = operator new(sizeof(string));
call string::string("Hands up!") on *mem;
string *ps = static_cast<string*>(mem);
也就是說operator new僅僅分配內(nèi)存(就像malloc一樣),我們能夠做的僅僅是重載operator new,為自己的類創(chuàng)建一個(gè)定制的內(nèi)存管理方案,這也讓我有點(diǎn)明白為什么在重載operator new的時(shí)候并沒有寫調(diào)用構(gòu)造函數(shù)的代碼,但它確實(shí)被調(diào)用了,原來都是new operator搞的鬼。