最简单的Scope Guard
class SimplestScopeGuard {
public:
SimplestScopeGuard(std::function<void()> func) : func_(func), dismiss_(false) {}
~SimplestScopeGuard() {
if (func_ && !dismiss_)
func_();
}
void Dismiss() {
dismiss_ = true;
}
private:
SimplestScopeGuard(const SimplestScopeGuard&) = delete;
SimplestScopeGuard& operator=(const SimplestScopeGuard&) = delete;
std::function<void()> func_;
bool dismiss_;
};