zoukankan      html  css  js  c++  java
  • 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异常

  • 相关阅读:
    解决多版本sdk兼容问题
    ios5 UIKit新特性
    iPhone网络编程–一起来做网站客户端(一)
    八数码
    IOS开发中编码转换
    修复ipa图片png方法
    创建易读链接 搭建应用通往App Store的桥梁
    如何让IOS应用从容地崩溃
    详解IOS IAP
    jquery创建并行对象或者叫合并对象
  • 原文地址:https://www.cnblogs.com/Hisin/p/3152925.html
Copyright © 2011-2022 走看看