1. 1、本文档共129页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Cexception.

C与C++中的异常处理 Robert Schmidt 著 无情 译 目 录 1. 异常和标准C对它的支持 2 2. Microsoft对异常处理方法的扩展 12 3. 标准C++异常处理的基本语法和语义 27 4. 实例剖析EH 33 5. C++的new和delete操作时的异常处理 40 6. Microsoft对于new的实现版本中的异常处理 47 7. 部分构造及placement delete 53 8. 自动删除,类属new和delete、placement new 和placement delete 59 9. placement new 和placement delete,及处理构造函数抛出的异常 68 10. 从私有子对象中产生的异常 74 11. 异常规格申明 83 12. unexpected()的实现上固有的限制 89 13. 异常安全 94 14. 模板安全 100 15. 模板安全(续) 107 16. 指导方针 113 17. C++异常和Visual C++ SEH的混合使用 120 异常和标准C对它的支持 (前言略) 异常分类 基于Dr. GUI的建议,我把我的第一个专栏投入到“程序异常”的系列上。我认识到,“exception”这个术语有些不明确并和上下文相关,尤其是C++标准异常(C++ standard exceptions)和Microsoft的结构化异常(structured exception handling)。不幸的的是,“异常”一词太常见了,随时出现在语言的标准和常见的编程文献中。因为不想创造一个新名词,所以我将尽力在此系列的各部分中明确我对“异常”的用法。 Part 1概述通常意义上的异常的性质,和标准C库提供的处理它们的方法。 Part 2纵览Microsoft对这些标准C库方法的扩展:专门的宏和结构化异常处理。 Part 3及其余将致力于标准C++异常处理体系。 (C语言使用者可能在Part2后放弃,但我鼓励你坚持到底;我所提出的许多点子同样适用于C,虽然不是很直接。) 本质上看,程序异常是指出现了一些很少发生的或出乎意料的状态,通常显示了一个程序错误或要求一个必须提供的回应。不能满足这个回应经常造成程序功能削弱或死亡,有时导致整个系统和它一起down掉。不幸的是,试图使用传统的防护方法来编制健壮的代码经常只是将一个问题(意外崩溃)换成了另外一个问题(更混乱的设计和代码)。 太多的程序员认为这个交换抵不上程序意外崩溃时造成的烦恼,于是选择了生活在危险之中。认识到这一点后,C++标准增加了一个优雅并且基本上不可见的“异常体系”到语言中;就这样,这个方法产生了。如同我们在Part4的开始部分将要看到的,这个方法大部分情况下很成功,但在很微妙的情况下可能失败。 异常的生命阶段 在这个系列里,我将展示C和C++处理异常体系运行于异常整个生命期的每一阶段时的不同之处: 阶段1:一个软件错误发生。这个错误也许产生于一个被底层驱动或内核映射为软件错误的硬件响应事件(如被0除)。 阶段2:错误的原因和性质被一个异常对象携带。这个对象的类型可以简单的整数值到繁杂的C++类对象。 阶段3:你的程序必须检测这个异常对象:或者轮询它的存在,或者由其主动上报。 阶段4:检测代码必须决定如何处理异常。典型的方法分成三类。 a忽略异常对象,并期望别人处理它。 b在这个对象上干些什么,并还允许别人再继续处理它。 c获得异常的全部所有权。 阶段5:既然异常已经处理了,程序通常恢复并继续执行。恢复分成两种: a恢复异常,从异常发生处继续执行。 b终止异常,从异常被处理处继续执行。 当在程序外面(由运行期库或操作系统)终止异常时,恢复经常是不可能的,程序将异常结束。 我故意忽略了硬件错误事件,因为它们完全是底层平台范围内的事。取而代之,我假定一些软件上的可检测错误已经发生,并产生了一个处于第一阶段的软件异常对象。 C标准库异常处理体系 C标准库提供了几个方法来处理异常。它们也全部在标准C++中有效,只是相关的头文件名字变了:老的C标准头文件name.h映射到了新的C++标准头文件cname。(头文件名的前缀“C”是个助记符,暗示着这些全是C库头文件。) 虽然基于向后兼容性,老的C头文件也被C++保留,但我建议你尽可能使用新的头文件。对于绝大部分实际使用而言,最大的变化是在新的头文件中,申明的函数被包含在命名空间std内。举个例子,C语言使用 #include stdio.h FILE *f = fopen(blarney.txt, r); 在C++中被改成

文档评论(0)

dashewan + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档