您的位置:首页 > 编程语言 > C语言/C++

C++标准库为何要求析构函数不能抛异常

2009-12-21 21:52 239 查看
在C++的标准库中要求,所有的标准类都不允许抛出异常.

当处理单个对象的析构时,析造函数抛出了异常被捕获.但对于对象数组的析构时,会出现问题,如:

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]时抛出了异常,导致了后面的对象无法正确的被析构.

因此,我们通常情况下不应在析构函数中抛出异常. 若是,我们已经设计出了一个这样的类,也不应该以数组的方式使用它,或者把它传给标准容器.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐