在C++的标准库中要求,所有的标准类都不允许抛出异常.
当处理单个对象的析构时,析造函数抛出了异常被捕获.但对于对象数组的析构时,会出现问题,如:
1 class A{
2 public:
3 int i;
4 A(){}
5 A(int i){
6 this->i=i;
7 }
8 ~A(){
9 cout<<"destroy object "<<i<<endl;
10 throw std::exception("destroy exception!");
11 }
12 };
13 int main(){
14 A* a=new A[10];
15 for(int i=0;i<10;i++){
16 *(a+i)=A(i);
17 }
18 delete[] a;
19 }
由于在析构a[0]时抛出了异常,导致了后面的对象无法正确的被析构.
因此,我们通常情况下不应在析构函数中抛出异常. 若是,我们已经设计出了一个这样的类,也不应该以数组的方式使用它,或者把它传给标准容器.