4.条款八:为什么不建议在析构函数中抛出异常?

1     try { db.close(); }
2     catch (...) {
3         //制作运转记录,标记下对close的调用失败;
4         std::abort();
5     }
6     try { db.close(); }
7     catch (...) {
8         //制作运转记录,标记下对close的调用失败,吞下异常,接着执行。
9     }

4.1.在析构函数中抛出异常,会导致“不明确行为”,比如导致后续某个指针无法delete掉等一些操作无法实施,导致程序出现灾难。

4.2.如果你想让某个函数在运行期抛出异常(如果有),应该将这些操作设置为一个普通成员函数而不是放在析构函数内

4.3.如果析构函数一定会抛出异常,那么有两种办法解决,一种调用std::abort()(通常下),停止执行程序并返回信息;一种是忽略掉异常,继续执行,记录异常信息。

posted @ 2019-11-20 22:12  Royzzzzz  阅读(233)  评论(0编辑  收藏  举报