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()(通常下),停止执行程序并返回信息;一种是忽略掉异常,继续执行,记录异常信息。