重载new操作符
void * operator new(size_t size)?
{
if (size == 0) { // 處理0字節請求時, size = 1; // 把它當作1 個字節請求來處理 } while (1) { 分配size 字節內存; if (分配成功) return (指向內存的指針); //?分配不成功,找出當前出錯處理函數 new_handler globalHandler = set_new_handler(0); set_new_handler(globalHandler); if (globalHandler) (*globalHandler)(); else throw?std::bad_alloc(); }
{
if (size == 0) { // 處理0字節請求時, size = 1; // 把它當作1 個字節請求來處理 } while (1) { 分配size 字節內存; if (分配成功) return (指向內存的指針); //?分配不成功,找出當前出錯處理函數 new_handler globalHandler = set_new_handler(0); set_new_handler(globalHandler); if (globalHandler) (*globalHandler)(); else throw?std::bad_alloc(); }
}
0字節->1字節
成功->返回指針
失敗->處理函數/拋出異常->再(嘗試)分配
??
??
類中重載的new操作符會覆蓋全局/標準new操作符->類中增加全局/標準new操作符
總結
- 上一篇: B树,B+树
- 下一篇: 公有继承意味着 是一个,私有继承意味着用