Ton*_*ion 2 c++ exception-handling
所以假设你有一个异常,你正在捕获,然后在catch中写入一个日志文件,发生了一些异常.然后你希望你的程序继续,所以你必须确保某些不变量仍处于良好状态.然而,在异常被捕获"处理"之后系统中实际发生了什么?
堆栈已经解开了,那么如何恢复它的状态呢?
"堆栈展开"意味着保留throw匹配catch子句之间的所有作用域,为这些作用域中的所有自动对象调用析构函数,几乎与从函数返回时保留函数作用域的方式相同.
没有其他任何"特殊"的做法,一个catch条款的范围是一个正常的范围,并留下它与留下一个else条款的范围没有什么不同.
如果您需要确保某些不变量仍然存在,则需要对代码进行编程,以便以线程安全的方式更改它们.Dave Abrahams写了关于异常安全的不同层次的经典,你可能想要阅读.基本上,为了在抛出异常时保持安全,您必须使用RAII.
| 归档时间: |
|
| 查看次数: |
5456 次 |
| 最近记录: |