性的最有效方法之一c语言本实现出错处理的方法是.pptVIP

  • 1
  • 0
  • 约1.34万字
  • 约 77页
  • 2018-12-28 发布于福建
  • 举报

性的最有效方法之一c语言本实现出错处理的方法是.ppt

性的最有效方法之一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

文档评论(0)

1亿VIP精品文档

相关文档