首页 > 其他 > 详细

new不抛出异常nothrow与new_handler

时间:2017-03-04 12:59:28      阅读:225      评论:0      收藏:0      [点我收藏+]

可以看这里:

http://blog.csdn.net/huyiyang2010/article/details/5984987

 

现在的new是会抛出异常的,bad::alloc

如果不想抛出异常两种方法:

1. 用nothrow版本, new (std::nothrow) xxx();

那样new失败会返回NULL

 

2. 加一个new_handler

但是注意不要直接改全部的,最好在自定义的operator new里面来加:

在operator new中做如下事情:

1、首先调用标准的set_new_handler,自定义专属类的处理函数

2、调用global operator new,执行实际的内存分配。如果内存分配失败,刚才被安装的new_handler将被调用。

3、无论new成功还是失败,都必须在类自定义的operator new结束前恢复全局new_handler

 

new不抛出异常nothrow与new_handler

原文:http://www.cnblogs.com/charlesblc/p/6500869.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!