std::set_new_handler(globalhandler); return memory; } // this sets each currenthandler to 0
template new_handler newhandlersupport::currenthandler; 有了這個模板類,對類x加上set_new_handler功能就很簡單了:只要讓x從newhandlersupport繼續: // note inheritance from mixin base class template. (see // my article on counting objects for information on why // private inheritance might be preferable here.) class x: public newhandlersupport {
... // as before, but no declarations for }; // set_new_handler or operator new
這個例子說明了一個普遍原則:operator new和operator delete必須同時寫,這樣才不會出現不同的假設。假如寫了一個自己的內存分配程序,就要同時寫一個釋放程序。(關于為什么要遵循這條規定的另一個理由,參見article on counting objects一文的the sidebar on placement章節)
因而,繼續設計airplane類如下:
class airplane { // 和前面的一樣,只不過增加了一個 public: // operator delete的聲明 ...
所有一切都很好,但從你皺起的眉頭我可以知道你一定在擔心內存泄露。有著大量開發經驗的你不會沒注重到,airplane的operator new調用::operator new 得到了大塊內存,但airplane的operator delete卻沒有釋放它們。內存泄露!內存泄露!我分明聽見了警鐘在你腦海里回響。