CppCoreGuidelines E.18 减少 try/catch 语句显式的使用
09 August 2023
“Minimize the use of explicit try/catch”
理由
try/catch
用起来很繁琐,容易出错。 try/catch
意味着代码设计不够系统,或者有底层资源管理交互,或者错误处理。
错误例子
void f(zstring s) { Gadget* p; try { p = new Gadget(s); // ... delete p; } catch (Gadget_construction_failure) { delete p; throw; } }
这段代码开起来很混乱。原始指针可能在 try
语句中泄漏内存。没有完全处理所有异常。删除一个构造过程中出错的对象显然是个错误。
更好的代码
void f2(zstring s) { Gadget g {s}; }
其他方法
- 通过 RAII 妥善处理资源管理
- 使用
finally