- 1
- 0
- 约1.34万字
- 约 77页
- 2018-12-28 发布于福建
- 举报
性的最有效方法之一c语言本实现出错处理的方法是
第九章 异常处理 9.4.5 异常的重新抛出 如果运行错误抛出的异常对象虽然被直接调用环境 中的异常处理器捕获,但根据所获得错误信息在当前 运行环境中无法对异常进行恰当的处理,则需要将所 捕获的异常对象从当前的运行环境重新抛向高一层运 行环境,使产生异常的错误能在高一层运行环境中得 到恰当的处理或将异常对象继续重新抛出。注意,如 果在当前运行环境中没有捕获运行错误抛出的异常对 象,则重新抛出异常对象的操作是自动发生的。 实现重新抛出异常的方法是在捕获异常对象的异常 处理器分支中使用不带参数的 throw 语句。例如使用省 略号做参数捕获任意类型异常对象时,由于无法得到 有关异常的信息而将异常对象重新抛出: catch(…) { cout an unkown exception was thrown endl; throw; } 由于每个被抛出异常对象在未被处理之前是被保留 的,所以更高层次的运行环境的处理器总可以获得来 自这个异常对象的完整信息。 9.4.6 未捕获的异常 如果测试块 try 执行过程中抛出的异常对象在当前的 异常处理器没有被捕获,则异常对象将进入更高一层 的运行环境中。这种异常对象的抛出、捕获、处理过 程按照运行环境的调用关系逐层进行,直到在某个层 次的运行环境的异常处理器中捕获并恰当处理了异常 对象才停止,否则将一直进行到调用系统的特定函数 terminate() 终止程序的运行。例如,在异常对象的创建 过程中、异常对象的被处理过程中或异常对象的析构 过程中又抛出了新异常对象,就会产生所抛出的异常 对象不能被捕获。 注意: ⑴ 特殊函数 terminate() 也是一个使用函数指针实现调 用的函数,因此允许用户定义自己特定的程序终止 函数。在 C 标准库中,terminate() 的函数指针的缺 省值是指向系统函数 abort() 的调用地址。abort() 的 功能是不调用正常的程序终止函数而直接从程序中 退出。 ⑵ 使用系统函数 set_terminate 来设定用户自定义的终 止函数作为 terminate() 函数的新执行函数,取代该 函数的当前执行函数,并可以通过 set_terminate 的 返回值获得 terminate() 的当前执行函数调用地址。 ⑶ 用户的自定义终止函数除了必须不含输入参数,其 返回值必须为 void 外,不能抛出任何异常对象,但 可以调用一些程序终止函数,如 abort() 。 在实际应用中,如果函数 terminate() 被调用,就意味 着程序的运行错误已经无法被恢复。 例9-3 展示了异常对象的析构过程中抛出异常对象将 导致程序终止函数 terminate() 被调用。为了能观 察到 terminate() 被调用的情况,定义了一个自定 义的终止函数,并使用 set_terminate 将其设定为 terminate() 的新执行函数。 9.5 异常处理中对象的清除 异常处理是否有效的关键就在于:当异常对象被抛 出,程序从正常流程转入异常处理器的执行流程时, 正常流程执行环境中所创建的对象除异常对象外必须 被正确地清除。 C++ 的异常处理器可以保证程序流程离开一个运行 环境的作用域时,该作用域中所有结构完整的对象的 析构函数将被调用,以确保清除这些对象。因此,如 何保证对象的完整创建就成为需要特别关注的问题。 例9-4 描述了由于在对象的创建过程中发生异常,使对 象不能被完整创建,导致异常对象抛出时这些不 完整的对象不能被清除。同时还展示了如果 unexpected() 函数执行中再次抛出意外的异常对 象时将会产生什麽结果。 程序运行结果被记录在文本文件 cleanup.out 中,其内 容如下: constructing noisy 0 name [before array] noisy::new[] constructing noisy 1 name [array elem] constructing noisy 2 name [array elem] constructing noisy 3 name [array elem] constructing noisy 4 name [array elem] constructing noisy 5 name [array elem] destructing noisy 4 name [array elem] destructing noisy 3 name [array elem] destructing noisy 2 name [array elem] destructing noisy 1 n
您可能关注的文档
- 信息系统开发评或价方法.ppt
- 信息系统开发团的基本概念.ppt
- 信息宣传写作呢常识讲座.ppt
- 信息组给织-科技论文写作yao201305.ppt
- 信用证项下带的汇票缮制.ppt
- 星状神经节阻滞治九疗失眠.ppt
- 刑罚学能第六章犯罪的客观方面.ppt
- 刑法分则原理精析(第即三章).ppt
- 刑法总论第八章犯罪主外观方面.ppt
- 刑事诉讼法的女历史发展.ppt
- FDA指南|开发CAR-T细胞产品的考量(中英文版).pdf
- XDR50L-2000L反应器操作手册.pdf
- 【优质】高三(2)班《青春逢盛世 奋斗正当时》高考冲刺130天主题班会(18张PPT).pptx
- 人形机器人行业:2025~2035元趋势报告.pdf
- 小学语文人教版三年级《槐乡的孩子》教育教学课件.pptx
- 高中语文人教版高二必修《醉花阴》教育教学课件.pptx
- 部编版语文五年级下册期末复习课件 积累与运用(共24张PPT).ppt.pptx
- 初中美术教学论文写作技巧分享.pptx
- 2025年江苏省普通高中学业水平合格性考试政治试卷(原卷版).docx
- 贵州省2025年12月普通高中学业水平合格性考试政治试题(原卷版).docx
原创力文档

文档评论(0)