标签:写入 多个 类库 例程 als 一段 tac 设置 exp
一、异常处理机制基础
异常的定义
程序中可以检测的运行不正常的情况
异常处理的基本流程
某段程序代码在执行操作时发生特殊情况,引发一个特定的异常
另一段程序代码捕获该异常并处理它
二、异常的引发
throw
三、异常的捕获
try
{
...
}
catch(...)
四、异常类与异常对象
五、异常处理策略
异常类可以派生和继承,形成类库架构
可捕获的异常对象的型式
普通型式(包括类):异常对象需要拷贝
对某型式对象的引用:没有额外的拷贝动作
指向某型式对象的指针:要求对象动态构造或者在catch子句中可以访问
catch子句
异常再引发
try
{
throw AnException();
}
catch(...)
{
//...
throw;
}
栈展开
异常引发代码和异常处理代码可能属于不同的函数
当异常发生时,沿着异常处理块的嵌套顺序逆向查找能够处理该异常的catch子句
如果找到对应的catch子句,处理该异常
异常处理完毕后,程序保持catch子句所在的函数栈框架,不会返回引发异常的函数栈框架
函数栈框架消失时,局部对象被析构,但如果未执行delete操作,动态分配的目标对象未析构
未处理异常
所有未处理的异常由预定义的std::terminate()函数处理
可以使用std::set_terminate()函数设置std::terminate()函数的处理例程
void term_func() { exit(-1); } int main() { try { set_terminate(term_func); throw "out of memory!"; } catch (int) { /*...*/ } return 0; } //由于catch只能处理整数型的异常,因此字符串型的异常无法处理,交由term_func()函数处理; //假设没有定义term_func()函数,则所有的无法处理的异常都交由操作系统处理
描述函数是否引发异常
C++11规范
六、异常描述规范
//例子 //类声明时将会引发异常的函数描述清楚 class JuStack { public: int pop() throw(EstackEmpty); void push(int value)throw(EStackFull); };
标签:写入 多个 类库 例程 als 一段 tac 设置 exp
原文地址:http://www.cnblogs.com/hujianglang/p/6246653.html