zoukankan      html  css  js  c++  java
  • 异常变量的声明周期

    异常变量的声明周期

    • 如果  MyException e,会多开销一份数据 ,调用拷贝构造
    • 如果 MyExcepiton *e   , 不 new提前释放对象 new 自己管理delete
    • 推荐  MyException &e  容易些 而且 就一份数据
    #define _CRT_SECURE_NO_WARNINGS
    #include <iostream>
    using namespace std;
    
    class myException
    {
    public:
        myException()
        {
            cout << "myException的默认构造" << endl;
        }
        ~myException()
        {
            cout << "myException的析构" << endl;
        }
        myException(const myException& e)
        {
            cout << "myException的拷贝构造" << endl;
        }
    };
    void doWork()
    {
        throw myException();
    }
    void test01()
    {
        try
        {
            doWork();
        }
        //catch (myException e)  //myException e, 会多开销一份数据, 最后会有两次析构
        catch (myException& e)  //myException& e, 调用的还是默认构造出来的
        //catch (myException* e)  //myException* e, 那么throw的时候要加&  throw &myException(); 后果 没等走到下面就已经释放了 catch里无法调用e里面的成员函数 即使不报错 也是指向非法空间
        {
            cout << "捕获异常" << endl;
            //delete e;//  *e 需要手动释放资源
        }
    }
    
    int main()
    {
        test01();
        system("Pause");
        return 0;
    }
  • 相关阅读:
    《怎样解题》-波利亚
    BZOJ2631 tree
    BZOJ3669 [Noi2014]魔法森林
    BZOJ 2049 [Sdoi2008]Cave 洞穴勘测
    BZOJ2002 [Hnoi2010]Bounce 弹飞绵羊
    动态树入门
    树链剖分入门-Hdu3966 Aragorn's Story
    BZOJ1146 [CTSC2008]网络管理Network
    树的表示方法
    树状数组
  • 原文地址:https://www.cnblogs.com/yifengs/p/15184621.html
Copyright © 2011-2022 走看看