CppCoreGuidelines E.19 如果没有合适的资源管理句柄,请使用 final_action 进行资源清理
10 August 2023
“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::finally
比 try/catch
更精简,但依然是一个临时方案。建议使用恰当的资源管理对象。以 gsl::finally
作为最后一个方案来考虑。
注意
总的来说,如果没有合适的系统资源管理工具,用 gsl::finally
系统化地清理资源比老式的 goto exit;
技术要好些。
强化
- 检测
goto exit;
语句