异常类的构造函数和析构函数的使用

问题:

1,定义异常类的过程中,什么时候使用异常类的析构函数,什么时候使用异常类的构造函数?

2,在try catch 中,为什么有时候用到的是catch(exception &e),而有时候用到的时catch(exception e),这两个有什么区别?什么时候用到?

为此专门写了以下一段代码,帮助理解:

测试结果:


解释说明:

首先,在第一个try catch 中throw显示的创建一个异常对象并抛出,程序执行顺序为:异常类的默认构造函数->捕获异常,处理->析构函数。

然而,在第二个try catch 中,函数的调用顺序就比较复杂了。调用顺序如下:

1,首先在函数g()中声明了异常类,调用默认构造函数。

2,抛出异常类,此时会创建一个异常类的副本,调用拷贝构造函数。

3,抛出异常时,函数g()会退出,此时调用析构函数,析构掉之前创建的局部对象。

4,catch(Excp e)捕获异常时,使用的是对象声明,再次拷贝一个副本,调用构造函数。

5,catch(Excp e)中,处理异常。

6,副本和原始对象被析构,调用两次析构函数。

总而言之,整个调用过程还是比较复杂的。



  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值