set_new_handler

转自:http://www.cnblogs.com/hbt19860104/archive/2012/10/10/2717873.html

以及 http://zhaoweizhuanshuo.blog.163.com/blog/static/14805526220108545937329/

当运算符new找不到足够大的连续内存块来为对象分配内存时将会发生什么?一个称为 new-handler的函数被调用。

对于new-handler的缺省动作是抛出一个异常。然而,如果我们在程序里用堆分配,至少要用“内存已用完”的信息代替 new-handler,并异常中断程序。用这个办法,在调试程序时会得到程序出错的线索。

通过包含NEW. H,然后以我们想装入的函数地址为参数调用set_new_handler( )函数,这样就替换了new-handler。

也就是说c++提供set_new_handler,当new失败时,会调用set_new_handler设置的回调函数。

typedef void (*new_handler)(); 

new_handler set_new_handler(new_handler p) throw(); 

可以看到,new_handler是一个自定义的函数指针类型,它指向一个没有输入参数也没有返回值的函数。

set_new_handler则是一个输入并返回new_handler类型的函数。set_new_handler的输入参数是operator new分配内存失败时要调用的出错处理函数的指针,返回值是set_new_handler没调用之前就已经在起作用的旧的出错处理函数的指针。

 

转载于:https://www.cnblogs.com/cyttina/p/3236759.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值