博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
内存分配失败捕捉 set_new_handler
阅读量:4660 次
发布时间:2019-06-09

本文共 812 字,大约阅读时间需要 2 分钟。

当内存分配请求不能满足时,调用你预先指定的一个出错处理函数。这个方法基于一个常规,即当operator new不能满足请求时,会在抛出异常之前调用客户指定的一个出错处理函数——一般称为new-handler函数。(operator new实际工作起来要复杂一些,详见条款8)

指定出错处理函数时要用到 set_new_handler 函数,它在头文件<new>里大致是象下面这样定义的:
    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 没调用之前就已经在起作用的旧的出错处理函数的指针。
可以象下面这样使用set_new_handler:
    // function to call if operator new can't allocate enough memory
    void noMoreMemory()
    {
        cerr << "Unable to satisfy request for memory\n";
        abort();
    }
    int main()
    {
        set_new_handler(noMoreMemory);
        int *pBigDataArray = new int[100000000];
        ...
    }

转载于:https://www.cnblogs.com/dongzhiquan/archive/2012/12/03/2800490.html

你可能感兴趣的文章
[总结]高斯消元&XOR方程
查看>>
bootstrap table 使用入门
查看>>
【Abode Air程序开发】在设备上进行安装
查看>>
【读书笔记】程序员的自我修养总结(四)
查看>>
【Qt开发】QThread中的互斥、读写锁、信号量、条件变量
查看>>
object-c 对象内存分配
查看>>
阿铭linux笔记
查看>>
Oracle表字段的增加、删除、修改和重命名
查看>>
基于Java的Socket编程技术
查看>>
SVG学习小结
查看>>
Oracle-数据库启动步骤
查看>>
人物角色群体攻击判定(三)Physics.OverlapSphere(群体攻击)
查看>>
《美人心计》评论
查看>>
简单的图形学(三)——光源
查看>>
通过Tomcat Manager拿shell
查看>>
Mysql性能优化一:SQL语句性能优化
查看>>
设置EditText是否可编辑
查看>>
Huginn实现自动通过slack推送豆瓣高分电影
查看>>
javascript构造器模式创建对象
查看>>
linux centos7 文件挂载学习记录
查看>>