C++ 异常处理执行过程

时间:2022-04-22 21:52:50

  看《clean code》时,又遇到异常处理的例程。 看不明白是因为我一直都将异常处理束之高阁。

今天晚上下决心去找资料看看,看完之后觉得以前是把它想得太难,其实非常简单。

希望以后遇到问题,不要畏惧,争取搞懂。这是打基础的好时机,一点点的积累。

try throw catch.

异常处理的执行过程

(1)控制通过正常的顺序执行try语句,然后执行try块内的保护段。

(2)若保护段内没有引起异常,那么跟在try块后的catch子句就不执行。程序从异常被抛出try块跟随的最后一个catch子句在后面的语句继续执行下去。

(3)若发生异常,则根据类型找到合适的catch处理程序。若没有合适的处理程序,则继续像外层查找合适的处理程序。

(4)若一直未匹配到合适的处理程序。则函数terminate将被自动调用,即停止程序。

(5)若找到匹配的catch处理程序,catch处理程序被执行,接下来程序跳转到跟随在最后的处理程序之后的语句。

C++异常处理的真正能力,不仅在于他能够处理各种不同类型的异常,还在于它具有为异常抛掷前构造的所有局部对象自动调用析构函数的能力。

过程:

  找到合适的catch处理程序。复制被抛掷的异常对象, try块开始到的异常发生之间构造(且尚未析构)的所有自动对象进行析构。析构顺序与构造的顺序相反。然后程序从最后一个catch处理之后开始恢复执行。

异常处理并不简单,曾看过一篇博客:如果想搞懂一个东西,至少要找到google前一百个页面,搞懂其中所有的疑问,精通并不简单。

参考文献:《C++语言程序设计(第三版)》,郑莉、董渊、张瑞丰编著,第十二章 异常处理。