我们有一些需要手动释放的资源。除了显式地编写 RAII 包装器来管理其资源之外,是否存在 std 库中自动执行 lambda 任务的内置模板或类?
{
auto resource = InitResource();
GuardedTask task ([&resource]{ FreeUp(resource); }); // Simply bind a clean up lambda
...
if(failed_condition_met) { return false; } // Free up
...
if(another_failed_condition_met) { return false; } // Free up
} // Free up
该类可能会有以下行为,但我想知道轮子是否已经在std库中构建,或者我应该编写自己的轮子。
struct GuardedTask
{
std::function<void()> task;
GuardedTask(std::function<void()> f): task(f) {}
~GuardedTask(){ task(); }
};