#ifndef __defer_h__ #define __defer_h__ #include #include class defer { public: typedef std::function FX; defer() = default; defer(FX &&fx) : _fx(std::forward(fx)) {} defer(const defer &) = delete; defer(defer &&) = default; defer & operator=(const defer &) = delete; defer & operator=(defer &&) = default; void cancel() { _fx = nullptr; } ~defer() { if (_fx) _fx(); } private: FX _fx; }; #endif