class ScopeGuard{public: explicit ScopeGuard(std::function<void()> onExitScope) : onExitScope_(onExitScope), dismissed_(false) { } ~ScopeGuard() { if(!dismissed_) { onExitScope_(); } } void Dismiss() { dismissed_ = true; }private: std::function<void()> onExitScope_; bool dismissed_;private: // noncopyable ScopeGuard(ScopeGuard const&); ScopeGuard& operator=(ScopeGuard const&);};
这个类的使用很简单,你交给它一个std::function,它负责在析构的时候执行,绝大多数时候这个function就是lambda,例如:
HANDLE h = CreateFile(...);ScopeGuard onExit([&] { CloseHandle(h); });class ScopeGuard{public: explicit ScopeGuard(std::function<void()> onExitScope) : onExitScope_(onExitScope), dismissed_(false) { } ~ScopeGuard() { if(!dismissed_) { onExitScope_(); } } void Dismiss() { dismissed_ = true; }private: std::function<void()> onExitScope_; bool dismissed_;private: // noncopyable ScopeGuard(ScopeGuard const&); ScopeGuard& operator=(ScopeGuard const&);};
这个类的使用很简单,你交给它一个std::function,它负责在析构的时候执行,绝大多数时候这个function就是lambda,例如:
HANDLE h = CreateFile(...);ScopeGuard onExit([&] { CloseHandle(h); });联系客服