set_new_handler
2013-08-04 20:15
295 查看
转自:/article/6300935.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设置的回调函数。
可以看到,new_handler是一个自定义的函数指针类型,它指向一个没有输入参数也没有返回值的函数。
set_new_handler则是一个输入并返回new_handler类型的函数。set_new_handler的输入参数是operator new分配内存失败时要调用的出错处理函数的指针,返回值是set_new_handler没调用之前就已经在起作用的旧的出错处理函数的指针。
以及 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没调用之前就已经在起作用的旧的出错处理函数的指针。
相关文章推荐
- C++动态内存:(三) new-handler和set_new_handler
- 关于set_new_handler
- 关于set_new_handler(转载)
- 关于_set_new_handler
- set_new_handler() C++
- C++程序内存分配中set_new_handler…
- c++中的set_new_handler和new_handler
- c++中的set_new_handler和new_handler
- set_new_handler例子
- 条款 7:预先准备好内存不够的情况 set_new_handler
- 学习中遇到的问题-关于set_new_handler()
- 转:Set_New_Handler()
- 关于set_new_handler(转载)
- set_new_handler用法
- 关于set_new_handler
- std::set_new_handler
- typedef 与 set_new_handler的几种写法
- 【译】set_new_handler
- 关于在vc6.0中使用set_new_handler的问题
- 实现类的特定的set_new_handler,operator new ,operator delete