set_new_handler

之前,曾对new做了一些总结,详见" new的理解".
在看《effective C++》第8章时,对内存分配有一些新的认识,这里主要讲一讲对set_new_handler的理解。

当使用nothrow_t版的operator new时,如果不能满足一个内存分配请求,会返回一个NULL指针。
void* operator new (std::size_t size, const std::nothrow_t& nothrow_value) throw()
当使用throw (std::bad_alloc)版的operator new时,如果不能满足一个内存分配请求,会抛出一个异常。
void* operator new (std::size_t size) throw (std::bad_alloc)

在 operator new 因一个无法满足的内存请求而抛出一个异常之前,它先调用一个可以由客户指定的被称为 new-handler 的错误处理函数。
为了指定这个错误处理函数,客户需先设置 set_new_handler函数,内存分配失败后会反复调用这个new-handler 的错误处理函数。

错误处理函数的原型:
typedef void (*new_handler)();  //一个函数指针

set_new_handler的原型:
new_handler currentHandler = 0;
new_handler set_new_handler(new
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值