09 August 2023

C++ 核心指南目录

“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