zoukankan      html  css  js  c++  java
  • 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念心间
    我永铭记此仇不供戴天
  • 相关阅读:
    LeetCode:Validate Binary Search Tree
    二叉树的非递归遍历(非递归使用栈、非递归不使用栈)
    scala 基础语法
    scala VS python2 (linux or shell)
    web压力测试工具
    Elasticsearch cluster health: yellow unassigned shards
    GC overhead limit exceeded
    linux定时任务的设置
    linux CPU占用率高(转)
    JQuery Sparkline 说明文档
  • 原文地址:https://www.cnblogs.com/CUCmehp/p/1629316.html
Copyright © 2011-2022 走看看