• 用operator new申请内存失败会做一些什么


    面试官可能问你你怎么答

    首先,用operator new来申请内存,若内存申请失败,则会抛出bad_alloc异常.这是很简单的回答,但是是错误的.

    正确理解

    因为namespace std定义了一个set_new_handle函数,函数如下:
    Typedef void (*new_handler)();
    new_handler set_new_handler(new_handler new_p) throw();//C++98
    new_handler set_new_handler (new_handler new_p) noexcept;//C++11

    很显然可以看出new_handler是一个函数指针.如果设计了一个new_handler函数,则内存申请失败前不会先抛出异常,
    而是去反复调用new_handler指向的函数.
    该函数一般设计是去释放一些无用的内存.可以事先给该函数分配一块大内存.
    之后若一直申请都是失败还是如何可能就得看自己设计的new_handler指向的函数考虑了.

    如果operator new之前尚未定义set_new_handler,如果内存申请失败,就会直接抛出bad_alloc异常.

    operator new PK malloc
    operator new对比于c语言里的malloc申请内存有一些不同
    1. operator new有异常机制,malloc申请空间失败会返回NULL, operator new会选择抛异常.
    2. operator new在申请对象或结构体内存时会调用构造函数,malloc不会.

  • 相关阅读:
    面向对象和面向过程
    视图代理(转帖)
    qt中的多线程(转)
    QT GUI总结
    Qt探秘——谈ui文件的用法
    Qt的Model/View Framework解析
    编程入门指南 v1.4
    设计模式总结(经典)
    地址
    QLayout的属性介绍
  • 原文地址:https://www.cnblogs.com/2462478392Lee/p/14076470.html
Copyright © 2020-2023  润新知