赛迪网 > IT技术 C/C++ > 文章
  IT资讯搜索
 
IT产品搜索
[程序开发][网管世界][网络安全][数据库技术]
[操作系统][嘉宾聊天·在线访谈][活动集锦]
[精彩专题][Symantec专区][订阅IT技术周刊]
[开发论坛][网管论坛][安全论坛][数据库论坛]
[操作系统论坛][Sybase专区][IBM dW技术专区]
[病毒求助][病毒与漏洞播报][文档·源码下载]

C++箴言:理解new-handler的行为 (1)

发布时间:2006.03.15 06:27     来源:Blog    作者:fatalerror99

当 operator new 不能满足一个内存分配请求时,它抛出一个 exception(异常)。很久以前,他返回一个 null pointer(空指针),而一些比较老的编译器还在这样做。你依然能达到以前的目的(在一定程度上),但是我要到本文的最后再讨论它。

  在 operator new 因回应一个无法满足的内存请求而抛出一个 exception 之前,它先调用一个可以由客户指定的被称为 new-handler 的 error-handling function(错误处理函数)。(这并不完全确切,operator new 真正做的事情比这个稍微复杂一些,详细细节将在下一篇文章中讨论。)为了指定 out-of-memory-handling function,客户调用 set_new_handler ——一个在 中声明的标准库函数:

namespace std {
 typedef void (*new_handler)();
 new_handler set_new_handler(new_handler p) throw();
}

  就像你能够看到的,new_handler 是一个指针的 typedef,这个指针指向不取得和返回任何东西的函数,而 set_new_handler 是一个取得和返回一个 new_handler 的函数。(set_new_handler 的声明的结尾处的 "throw()" 是一个 exception specification(异常规范)。它基本上是说这个函数不会抛出任何异常,尽管真相更有趣一些。关于细节,参见《C++箴言:争取异常安全的代码》。)

  set_new_handler 的形参是一个指向函数的指针,这个函数是 operator new 无法分配被请求的内存时应该调用的。set_new_handler 的返回值是一个指向函数的指针,这个函数是 set_new_handler 被调用前有效的目标。

  你可以像这样使用 set_new_handler:

// function to call if operator new can't allocate enough memory
void outOfMem()
{
 std::cerr << "Unable to satisfy request for memory\n";
 std::abort();
}
int main()
{
 std::set_new_handler(outOfMem);
 int *pBigDataArray = new int[100000000L];
 ...
}

  如果 operator new 不能为 100,000,000 个整数分配空间,outOfMem 将被调用,而程序将在发出一个错误信息后中止。(顺便说一句,考虑如果在写这个错误信息到 cerr... 的过程中内存必须被动态分配会发生什么。)

1 2 3 4 5 6 7 下一页>>


[ 发表评论 ] 字体[  ] [ 打印 ] [ 进入博客 ] [ 进入论坛 ]  [ 推荐给朋友 ]
  相关文章
· 基于Visual C++ 6.0的Add-in编程实例 (03-14) · C++箴言:避免返回对象内部构件的句柄 (03-13)
· C++箴言:理解inline化的介入和排除 (03-13) · VC++中进程与多进程管理的方法 (03-10)
· 解决出现的LNK2005“符号已定义”错误 (03-10) · 取长补短:Simulink与VC++6.0接口比较 (03-10)
· C++箴言:如何访问模板化基类中的名字 (03-09) · 也玩视觉效果:VC++编程实现仿真火焰 (03-09)
· 体验C++中接口与实现分离的技术 (03-09) · Stan Lippman:C++/CLI全景体验 (03-08)
  客户需求反馈表
* 姓  名:
更多资料  了解方案  认识厂商
* 单位名称:
* 联系电话:
* 电子邮件:
  赛迪推荐  
  手机·资费 ·新品·导购·评测·手机资费·宽带
手机搜索  诺基亚 N73 MOTO Z6
  IT产品 ·笔记本·台式机·服务器·打印·投影
IT产品搜索 
  IT技术 ·开发·网管·安全·数据库·操作系统
  信息化 ·热点·专题·访谈·周刊·方案案例
[政务][电信][金融][农业][制造业][中小企业]
[CIO][ERP][协同][IT管理][中间件][电子商务]
[政策][地方][专家][评估][辞典][博客][社区]
· 专题:一路畅通构想曲——让出行不再遭遇堵车
· CIO工作亲历:企业ERP选型不能忽视"选人关"
· 综述:信息化建设给中国监狱带来的各种变化
· 金融业风险管理和法规遵从有五点需考虑的因素
· 保险业CIO关注:该如何建立统一高效的CRM体系
· 调查显示:多数CIO对IT规划仍存在困惑和误解
  博客·论坛 ·曾剑秋·项立刚·Java学习·网管