c++异常处理

<1>c++异常匹配规格是根据对象的静态类型进行匹配的c++

<2>typedef void (*f)() throw(int) typedef 语句中不能有异常规格说明ide

<3>throw;向上级抛异常函数

throw x;抛出异常spa

1.使用异常说明:对象

   void foo(void) throw(MyException)/*异常说明,而且foo函数体中只能抛出异常说明中的异常*/{}//只抛出MyException异常资源

   void foo(void){}//抛出任何异常it

   void foo(void)throw(){}//不抛出异常io

   另外:若是一个函数抛出了一个在其异常说明中未被列出的异常,那么std::unexpected()函数就会被调用。class

   它的缺省行为是调用std::terminate()函数,然后者又会调用abort()函数;循环

2.异常能够嵌套

3.若是函数的声明有异常说明,那么定义也须要有异常的说明

4.构造函数能够抛出异常,并且不少场合以这种方式处理构造过程当中的错误会更简单。

   可是要注意,抛异常前应该作必要的释放资源工做,由于不彻底对象的析构函数是不会被调用的。

5.不要在析构函数中抛出异常,由于抛出异常会致使对象的析构(C语言中若是出错可能会致使某些资源不能释        放),这样可能形成析构和抛出异常之间的死循环。

   若是在析构函数中有异常,应该在内部处理,不要抛出。

6.能够不处理抛出的异常,而交给上一层调用者,即向上一层继续抛出异常

7.示例:

class AppException {};

class SysException {};

throw AppException ();

throw SysException ();

try {


} catch (AppException& ex) {

   ex.what();

} catch (SysException& ex) {


}

8.注意__LINE__/__FILE__在自定义异常中的应用:

   throw MyExp (__FILE__, __LINE__);

9.不能抛出比基类虚函数更多的异常

相关文章
相关标签/搜索