![8c3bbfa03159c8da4949a358e3f1649a.png](https://i-blog.csdnimg.cn/blog_migrate/6cc407c0981aabbad2878349c83a53c7.png)
异常的捕获
在C++的异常处理中,throw负责抛出异常,catch负责捕获异常。
catch语句声明的可能是值参数或者引用参数,如果是值参数则直接复制抛出的异常对象;如果是引用参数则指向抛出的对象。
异常程序的析构
当try语句中使用throw抛出异常以后,从try语句块开始到throw语句之间创建的对象,都必须被正确的销毁。此时,如果使用throw抛出了异常,系统会自动调用这些对象的析构函数。
自动析构的例子
下面定义了一个简单的Fun类,并提供了对应的析构函数:
class Fun {
public:
~Fun() { printf("destroy Fun! n"); }
};
在try语句块开始到throw之间,创建了fun对象:
try{
// 创建fun对象
Fun fun;
int x = 0;
throw x;
}
catch (int) {
printf("handle the exception! n");
}
当使用throw抛出异常以后,throw语句前创建的对象的析构函数将会自动被调用,即Fun类的析构函数将会被自动调用:
~Fun() { printf("destroy Fun! n"); }