设为首页 加入收藏

TOP

effectiveC++(七)(五)
2010-12-26 23:03:08 来源: 作者: 【 】 浏览:9768
Tags:effectiveC

handler(new_handler p) { new_handler oldhandler = currenthandler; currenthandler = p; return oldhandler; }

最后看看x的operator new所做的:
1. 调用标准set_new_handler函数,输入参数为x的出错处理函数。这使得x的new-handler函数成为全局new-handler函数。注意下面的代码中,用了"::"符号显式地引用std空间(标准set_new_handler函数就存在于std空间)。

2. 调用全局operator new分配内存。如果第一次分配失败,全局operator new会调用x的new-handler,因为它刚刚(见1.)被安装成为全局new-handler。如果全局operator new最终未能分配到内存,它抛出std::bad_alloc异常,x的operator new会捕捉到它。x的operator new然后恢复最初被取代的全局new-handler函数,最后以抛出异常返回。

3. 假设全局operator new为类型x的对象分配内存成功,, x的operator new会再次调用标准set_new_handler来恢复最初的全局出错处理函数。最后返回分配成功的内存的指针。
c++是这么做的:

 

void * x::operator new(size_t size) { new_handler globalhandler = // 安装x的new_handler
    std::set_new_handler(currenthandler); void *memory; try { // 尝试分配内存 memory = ::operator new(size); }
catch (std::bad_alloc&) { // 恢复旧的new_handler std::set_new_handler(globalhandler);      throw; // 抛出异常 } std::set_new_handler(globalhandler); // 恢复旧的new_handler ret
首页 上一页 2 3 4 5 6 7 8 下一页 尾页 5/8/8
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇effectiveC++(八) 下一篇effectiveC++(六)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

最新文章

热门文章

C 语言

C++基础

windows编程基础

linux编程基础

C/C++面试题目