c++异常的生命周期
三种接收异常的方式
//情况一
catch (MyException & e)
{
cout << "异常捕获" << endl;
}*/
//情况二
catch (MyException e)
{
cout << "异常捕获" << endl;
}
//情况三
catch (MyException* e)
{
cout << "异常捕获" << endl;
delete e;
}
情况一,对应于调用构造 异常捕获后的析构
情况二,对应于调用构造和拷贝构造 异常捕获 析构
情况三,对应于new构造 异常捕获 析构(注意throw的时候不能使用&获取匿名对象地址的方式,会直接进行析构,无法捕获异常)
测试代码:
void test01()
{
//情况一二
//throw MyException();
//情况三无法捕获异常,捕获之前已经析构
//throw &MyException();
//情况三
throw new MyException();
}