【51】编写new和delete时需固守常规
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。