Effective C++之51

条款51:编写new和delete时需固守常规
       set_new_handler是设计newHandler的常用手段,寻找当前Handler的办法:
new_handler global_handler = set_new_handler(0);
set_new_handler(global_handler);
//调用
if(global_handler) (*global_handler)();
else throw std:bad_alloc();
       上面代码并不是线程安全的,原因就在于set_new_handler这个地方,当设置成0,可能会对其他线程造成影响。这样做很拙劣,但是没有办法,没有办法获知现在的new handler,只能通过这种办法来做。
       通常会将new内部做无限循环,一旦失败,调用new handler;如果没有new handler,则抛出异常。如果在class内,那么存在一旦被继承,那怎么办?通常在class内,new通常被定义成静态函数,那么一旦被继承,那么往往继承类和基类的大小不一样,那么需要检查参数大小。如果大小和基类不一致,直接交给::new处理就可以了。
       在处理delete的时候还需要处理delete NULL指针的问题。同样,继承的问题需要考虑。另外,虚拟析构函数是值得注意的问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值