STL源码剖析之_allocate函数
2014-04-10 16:57
239 查看
SGI STL提供的标准std::allocator中的_allocate函数代码如下:
现在的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++编译器。
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++编译器。
相关文章推荐
- 第一个MapReduce应用:WordCount
- 全景视频设备制造商Altia Systems融资1050万美元
- FCKeditor编辑器添加图片上传功能及图片路径问题解决方法
- 笑看花落
- 2014年4月7日 再次深入激辩余额宝
- JavaScript逻辑运算符及优先级
- PHP-claroline中文文件上传乱码解决
- How to read data from csv file in c#
- Android app 如何动态隐藏虚拟按键的考量.statusbar高度
- 浅析 Linux 中的时间编程和实现原理,第 2 部分: 硬件和 GLibC 库的细节
- setsockopt()用法
- Timer中schedule()的用法
- 大数据用于教育带来的负面冲击
- JAVA中什么时候要用super
- android动画 底部弹窗 效果
- xmpp 后台收受消息
- 工厂方法模式和抽象工厂模式区别
- 浅析 Linux 中的时间编程和实现原理,第 1 部分: Linux 应用层的时间编程
- 驱动开发中应该注意的事项
- 页面提交时等待