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

来源:互联网 发布:ubuntu挂载共享文件夹 编辑:程序博客网 时间:2024/06/05 16:35

问题:

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,副本和原始对象被析构,调用两次析构函数。

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



阅读全文
0 0
原创粉丝点击