如何重寫 operator new

來源:互聯網
上載者:User

滿足規則:
1、處理 0 大小的記憶體配置請求
2、具有一個無窮迴圈,用 while(true)
3、正確申請到記憶體,返回void*指標
4、不能申請到記憶體,調用 new_handler 處理,使用new_handler set_new_handler(void (*)())可以改變
5、如果new_handler==NULL,throw std::bad_alloc

全域的operator new
void* operator new(size_t size) throw(std::bad_alloc)
類特定的 operator new,3種
1)  static void* operator new (size_t size) throw(std::bad_alloc)
2) friend void operator new (size_t size) throw (std::bad_alloc)
3) void * operator new (size_t size) throw(std::bad_alloc) //member function

placement new 則 有多餘的 parameter ,size 由編譯器自動賦值,其他的參數使用者賦值,以下面的形式調用
new (<paraList>) Type;

operator delete
void operator delete(void* rawMemory) throw();    //normal signature at global scope
void operator delete(void* rawMemory,size_t size) throw();    //at class scope, need size_t parameter

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.