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;
    }
  • 相关阅读:
    django 自定义用户身份验证
    登录验证算法
    Scrapy
    爬虫性能相关
    Beautifulsoup模块
    selenium模块
    Cookie&Session
    Django Admin 本质
    JavaScript自执行函数和jquery扩展方法
    JS作用域与词法分析
  • 原文地址:https://www.cnblogs.com/yifengs/p/15184621.html
Copyright © 2011-2022 走看看