设为首页 加入收藏

TOP

Item 49:new handler的行为(二)
2016-02-23 11:35:09 】 浏览:10120
Tags:Item new handler 行为
ize) throw(std::bad_alloc){ NewHandlerHolder h(std::set_new_handler(current)); return ::operator new(size); }

有了这个模板基类后,给Widget添加”new-handler”支持只需要public继承即可:

class Widget: public NewHandlerSupport
       
        { ... }; 
       

其实NewHandlerSupport的实现和模板参数T完全无关,添加模板参数是因为handler是静态成员,这样编译器才能为每个类型生成一个handler实例。

nothrow new

1993年之前C++operator new在失败时会返回null而不是抛出异常。如今的C++仍然支持这种nothrow的operator new

Widget *p1 = new Widget;    // 失败时抛出 bad_alloc 异常
assert(p1 != 0);            // 这总是成立的

Widget *p2 = new (std::nothrow) Widget;
if(p2 == 0) ...             // 失败时 p2 == 0

“nothrow new” 只适用于内存分配错误。而构造函数也可以抛出的异常,这时它也不能保证是new语句是”nothrow”的。

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇C++ Primer 学习笔记_48_STL剖析.. 下一篇Item 45:使用成员函数模板来接受..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目