在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]时抛出了异常,导致了后面的对象无法正确的被析构.
因此,我们通常情况下不应在析构函数中抛出异常. 若是,我们已经设计出了一个这样的类,也不应该以数组的方式使用它,或者把它传给标准容器.
小人本潜水在思源的贴边 ID又多 又有钱 快活乐无边 谁知道站总监 他蛮横不留情面 他勾结站长目无天 占我ID夺我钱 我马甲跟他来翻脸 反被他来把经验减 我同学骂他欺新人 反被他捉进了小黑屋里面 874了一百遍啊一百遍 啊 最后他咬舌自尽 遗恨人间 他还将我和马甲赶出了思源 流落在人间 我为求回思源 无奈行乞在贴前 谁知道站总监他实在太阴险 知道此情形竟派人来暗算将我发文狂删到0篇 小人ID强 残命独留全 可怜马甲他 竟遭删 为求养ID 惟有傍人卖身自作践 一面苦赚钱 一面写诗篇 发誓把名气显 手刃总监意志坚啊 从此总监ID念心间 我永铭记此仇不供戴天 |