异常变量的声明周期

异常变量的声明周期

  • 如果  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;
}
原文地址:https://www.cnblogs.com/yifengs/p/15184621.html