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

    在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念心间
我永铭记此仇不供戴天
原文地址:https://www.cnblogs.com/CUCmehp/p/1629316.html