1、【50】講了,有很多理由需要寫個自定義的new/delete,自定義new/delete的時候,需要遵守一些規則。
2、迴圈申請,直到成功或者丟擲異常,如下:
1 void* operator new (std::size_t size) throw() 2 { 3 if(size=0) 4 { 5 size =1; 6 } 7 while (true) 8 { 9 if(分配成功) 10 { 11 return(一個指標,指向分配而來的記憶體); 12 } 13 new_hanlder global_handler = set_new_handler(0); 14 set_new_handler(global_handler); 15 if(global_handler) 16 { 17 (*global_handler)(); 18 } 19 else 20 { 21 throw std::bad_alloc(); 22 } 23 } 24 }
3、class專屬版本處理,分配大小與class大小不一致的錯誤。
4、delete的時候,判斷是否為null。