• Effective C++笔记之Item49【了解new-handler的行为】


    //---------------------------------------------------------
    //
    //---------------------------------------------------------
    1.新建C++工程或VC工程,默认的new_handler为NULL
      std::new_handler globalHandler = std::set_new_handler(NULL);
      std::set_new_handler(globalHandler);
      会发现globalHandler == NULL
    2.基于知识点1
      当operator new无法满足某一内存分配需求时,由于globalHandler == NULL,所以会抛出bad_alloc异常
    3.operator new与new_handler的内在关系
      void* operator new(std::size_t size) throw(std::bad_alloc)
      {
          while (true)
       {
           尝试分配size bytes;
        if (分配成功)
        {
            return (一个指针, 指向分配得来的内存)
        }
       
        // 分配失败
        new_handler globalHandler = set_new_handler(0);
        set_new_handler(globalHandler);
       
        if (globalHandler) (*globalHandler)();
        else throw std::bad_alloc();
       }
      }
      由以上的伪代码可以看出:
      当operator new无法满足内存申请并且new_handler不为NULL时,它会不断调用new_handler函数,直到找到足够内存
                                    并且new_handler为NULL时,它会抛出bad_alloc异常

  • 相关阅读:
    mysql自定义函数
    MYSQL常见运算符和函数
    PHP魔术方法和魔术变量总结
    魔术常量(Magic constants)
    常量和静态变量会先载入内存后在进行执行php代码
    php IP转换整形(ip2long)
    面试题1
    Java 通过 BufferReader 实现 文件 写入读取 示例
    UVA 2039 Pets(网络流)
    [置顶] Android框架攻击之Fragment注入
  • 原文地址:https://www.cnblogs.com/Hisin/p/3152925.html
Copyright © 2020-2023  润新知