为什么虚构函数不允许抛出异常
来源:互联网 发布:福顺达对讲机写频软件 编辑:程序博客网 时间:2024/05/01 21:20
第一个原因
Session::Session(){ //构造函数 logCreation(this); startTransaction(); //启动数据传送}Session::~Session(){ //析构函数 logDestruction(this); endTransaction(); //结束数据传送}设想如果在析构函数的logDestruction函数中抛出异常,那么endTransaction就不会被调用,因为异常发生之后异常点(即logDestruction)之后的语句块不会被执行。因此会产生资源泄漏。
解决方法如下
Session::Session(){ //构造函数 logCreation(this); startTransaction(); //启动数据传送}Session::~Session(){ //析构函数 try{ logDestruction(this); }catch(...){ endTransaction(); //结束数据传送 } }第二个原因是主要原因
当执行到某个语句块时假如产生了异常,那么在异常发生前已经构造好的对象将会被销毁,很明显是调用这些对象的析构函数进行销毁,假如这些析构函数又产生了异常,那么此时存在两个异常。系统无法处理这些异常,所以会调用terminate函数终止这个程序,这当然不是我们希望看到的,解决的方法就是让所有类的对象的析构函数不能抛出异常。
0 0
- 为什么虚构函数不允许抛出异常
- c++中为什么不允许虚构造函数?
- C++ - 为什么析构函数不允许抛出异常
- 为什么析构函数不能抛出异常
- 构造函数、析构函数可以抛出异常吗?为什么?
- 为什么在析构函数中不应该抛出异常?
- 为什么在析构函数中不应该抛出异常?
- C++ 为什么析构函数不能抛出异常问题
- C++ 为什么析构函数不能抛出异常
- 构造函数 抛出异常
- 抛出异常函数 @throw
- 构造函数抛出异常
- C++ 异常 与 ”为什么析构函数不能抛出异常“ 问题
- C++ 异常 与 ”为什么析构函数不能抛出异常“ 问题
- C++ 异常 与 ”为什么析构函数不能抛出异常“ 问题
- C++ 异常 与 ”为什么析构函数不能抛出异常“ 问题
- 为什么有虚析构函数,没有虚构造函数啊
- 构造函数为什么不能是虚构造函数
- Internal error. Please report to http://code.google.com/p/android/issues
- STL学习笔记-stack容器(栈)
- 多线程解析20151021
- window.location.reload与window.location.href
- 思维盛宴之设计模式-构建者模式Builder Pattern
- 为什么虚构函数不允许抛出异常
- autofs简介
- mysql sql优化实例1(force index使用)
- Java中的关键字和标识符
- sicily 1381. a*b
- [LeetCode]Pascal's Triangle
- 17.用JavaScript实现如下效果:一个div的宽度从其初始宽度1px,每秒增长1px,直到变到100px,再从100px每秒减少1px,直到变回到1px,如此反复5次后,该变化停止,并将其最
- 通过Java插入MYSQL的DATETIME类型
- ORA-02020的处理,dblink超出数量的设置