C++标准库为何要求析构函数不能抛异常
2009-12-21 21:52
239 查看
在C++的标准库中要求,所有的标准类都不允许抛出异常.
当处理单个对象的析构时,析造函数抛出了异常被捕获.但对于对象数组的析构时,会出现问题,如:
由于在析构a[0]时抛出了异常,导致了后面的对象无法正确的被析构.
因此,我们通常情况下不应在析构函数中抛出异常. 若是,我们已经设计出了一个这样的类,也不应该以数组的方式使用它,或者把它传给标准容器.
当处理单个对象的析构时,析造函数抛出了异常被捕获.但对于对象数组的析构时,会出现问题,如:
class A{ public: int i; A(){} A(int i){ this->i=i; } ~A(){ cout<<"destroy object "<<i<<endl; throw std::exception("destroy exception!"); } }; int main(){ A* a=new A[10]; for(int i=0;i<10;i++){ *(a+i)=A(i); } delete[] a; }
由于在析构a[0]时抛出了异常,导致了后面的对象无法正确的被析构.
因此,我们通常情况下不应在析构函数中抛出异常. 若是,我们已经设计出了一个这样的类,也不应该以数组的方式使用它,或者把它传给标准容器.
相关文章推荐
- 为何virtual析构函数不能是protected?
- 为什么C++不能有虚构造函数,却可以有虚析构函数
- 为什么C++不能有虚构造函数,却可以有虚析构函数
- 老男孩教育每日一题-第63天-批量创建用户并设置随机密码(要求不能使用shell循环语句)
- 浮动为何不能撑起父容器
- C++ 中析构函数为什么要求是虚的
- 通过封装编写Book类。要求:类具有私有属性书名title、页数pageNum、类型type(默认为计算机类),并为这三个属性分别编写set和get方法。其中,页数不能少于200页,否则输出错误信息,
- 一句话说明浮点数为何不能直接 if(f== 0.0)这样判断
- 【源码】用1,2,2,3,4,5这六个数字,写一个函数,打印出所有不同的排序,要求:4不能放在第三位,3与5不能相连(C语言实现)
- 求解1+2+3+...+n,要求不能使用乘除法、while、for、if 、else、switch、case等关键字
- 实现1+2+3+...+n。要求不能使用乘除法,for,while,if,else,switch,case,等关键字及条件判断语句。
- Spring mvc为何不能直接传递集合参数
- 九宫格求解,结果为何不能输出?
- 求1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A?B:C)
- Infopath中,自己编写的ActiveX控件,为何不能绑定数据到XML属性节点
- 10、 java 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 要求不能出现截半的情况
- 为何U盘不能一直插在电脑上
- 为什么构造函数不能声明为虚函数,析构函数可以
- 为何nested loop要求小表驱动,hash join又为何要求小表hashed?
- 为何不能上网浏览网页 但是可以用QQ聊天