#include <functional> #pragma once class CScopeGuard //用于延迟执行构造函数传入的函数 { //public: // CScopeGuard(); // ~CScopeGuard(); public: explicit CScopeGuard(std::function<void()> onExitScope) : onExitScope_(onExitScope), dismissed_(false) { } ~CScopeGuard() { if (!dismissed_) { onExitScope_(); } } void Dismiss() { dismissed_ = true; } private: std::function<void()> onExitScope_; bool dismissed_; private: // noncopyable CScopeGuard(CScopeGuard const&); CScopeGuard& operator=(CScopeGuard const&); }; #define SCOPEGUARD_LINENAME_CAT(name, line) name##line #define SCOPEGUARD_LINENAME(name, line) SCOPEGUARD_LINENAME_CAT(name, line) #define ON_SCOPE_EXIT(callback) CScopeGuard SCOPEGUARD_LINENAME(EXIT, __LINE__)(callback)
利用类的析构函数在作用域结束后自动调用,对一些变量进行释放。