zoukankan      html  css  js  c++  java
  • STL源码剖析之_allocate函数

    SGI STL提供的标准std::allocator中的_allocate函数代码如下:

    template<class T>
    inline T* _allocate(ptrdiff_t size,T*)
    {
        set_new_handler(0);
        T* tmp=(T*)(operator new((size_t)(size*sizeof(T))));
        if(tmp==0)
        {
            cerr<<"out of memory"<<endl;
            exit(1);
        }
        return tmp;
    }

    现在的C++标准中,operator new的原型为: void* operator new(std::size_t size) throw(std::bad_alloc),在operator new分配内存失败的时候自动调用new_handler,如果new_handler为NULL,则抛出bad_alloc异常,既然抛出异常,那么代码中的if语句的处理就显得多余,岂不画蛇添足?

    原来,在1993年之前的C++中,operator new的原型为: void* operator new(std::size_t size) throw(),分配失败时返回NULL,不抛出异常。所以这里是为了兼容过去的编译器才出现了if的处理,使之能适应新旧C++编译器。

  • 相关阅读:
    time模块
    time模块,计算时间差
    re模块
    Python之常用文件操作
    Django运行错误常见问题及解决方法1
    用JetBrains PyCharm 2017.2创建运行Django程序
    wsgi Python的WEB框架
    django模块安装环境变量
    Django
    DOM
  • 原文地址:https://www.cnblogs.com/wwblog/p/3656879.html
Copyright © 2011-2022 走看看