【发布时间】:2017-03-30 07:28:13
【问题描述】:
我们有一些资源,需要手动释放。除了显式编写 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(); }
};
【问题讨论】:
-
请注意,您必须删除复制构造函数/赋值。