10 August 2023

C++ 核心指南目录

“Use a final_action object to express cleanup if no suitable resource handle is available”

理由

GSL 库中的 gsl::finally 相比 try/catch 更精简,不易出错。

例子

void f(int n)
{
    void* p = malloc(n);
    auto _ = gsl::finally([p] { free(p); });
    // ...
}

注意

虽然 gsl::finallytry/catch 更精简,但依然是一个临时方案。建议使用恰当的资源管理对象。以 gsl::finally 作为最后一个方案来考虑。

注意

总的来说,如果没有合适的系统资源管理工具,用 gsl::finally 系统化地清理资源比老式的 goto exit; 技术要好些。

强化

  • 检测 goto exit; 语句