首页 理论教育C++程序设计基础教程:异常处理中的对象建构和析构

C++程序设计基础教程:异常处理中的对象建构和析构

【摘要】:解:上述程序中,在执行main()中的fun();语句时调用fun()函数,该函数要首先构造对象in1,调用Ins类的构造函数Ins(),并将in1入栈,然后构造对象in2,调用Ins类的构造函数Ins,并将in2入栈,最后执行throw Ex();语句抛掷Ex类异常,在检测到catch时,展开该栈,先是对象in1出栈,执行Ins类的析构函数,再是对象in2出栈,又一次执行Ins类的析构函数。

若在try语句块的throw语句之前定义了对象,程序在退出try语句块时,系统会自动调用对象析构函数销毁对象。

【例9.4】分析以下程序的执行结果。

解:在main函数的try块中调用f()函数,创建Two类的对象b,调用Two类的构造函数,执行f中的throw One()语句抛掷异常,自动析构对象b,由catch(One e)捕获并处理(这里仅输出异常类型)。程序执行结果如下:

进入main

在try块中调用f()

Two构造函数

f():抛掷一个One异常

Two析构函数

在catch处理器中捕获一个异常类型:异常在One类中

返回main

【例9.5】分析以下程序的执行结果。

解:上述程序中,在执行main()中的fun();语句时调用fun()函数,该函数要首先构造对象in1,调用Ins类的构造函数Ins(),并将in1入栈,然后构造对象in2,调用Ins类的构造函数Ins(intm),并将in2入栈,最后执行throw Ex();语句抛掷Ex类异常,在检测到catch(Ex e)时,展开该栈,先是对象in1出栈,执行Ins类的析构函数,再是对象in2出栈,又一次执行Ins类的析构函数。程序的执行结果如下:(www.chuimin.cn)

开始执行main()主函数.

在try块中,调用fun().

构造Ins对象1.

构造Ins对象2.

在fun()函数中抛掷Ex类异常.

析构Ins对象.

析构Ins对象.

在catch中捕获到Ex类型异常.

调用ShowReason()成员函数.

main()主函数执行完毕.