/*
1.throw的异常是有类型的,可以是数字,字符串,类对象。
2.throw的异常是有类型的,catch需严格匹配异常类型
*/
# include <iostream>
# include <cstring>
using namespace std;
void func01()
{
throw 1;//抛出int 类型异常
}
void func02()
{
throw "exception";//抛出char*类型
}
class MyException
{
public:
MyException()
{
cout << "MyException()..." << endl;
}
MyException(const MyException& another)
{
cout << "MyException(const MyException& another)..." << endl;
}
~MyException()
{
cout << "~MyException()..." << endl;
}
};
void func()
{
# if 0
//普通和引用元素
throw MyException();//创建匿名对象,调用构造函数
# endif
#if 1
//指针
//throw &(MyException());//这样会提前析构掉
throw new MyException();//所以要控制它的生命周期
# endif
}
void test01()
{
//普通类型元素 引用 指针
//普通元素 catch处理完之后就析构
//引用的话 不用调用拷贝构造
//异常对象catch处理完之后就析构
//指针会提前析构掉
try
{
func();
}
#if 0
//第一种普通类型元素
catch(MyException e)
{
cout << "异常捕获!" << endl;
}
# endif
# if 0
//引用
catch(MyException &e)
{
cout << "异常捕获!" << endl;
}
# endif
# if 01
//指针
//指针会提前析构掉
catch(MyException *e)
{
cout << "异常捕获!" << endl;
delete e;
}
# endif
}
int main(int argc, char *argv[])
{
test01();
return 0;
}