#ifndef H_SCOPE_H #define H_SCOPE_H #include "hdef.h" #include class ScopeCleanup{ public: typedef std::function FT; template ScopeCleanup(Fn&& fn, Args&&... args) { cleanup_ = std::bind(std::forward(fn), std::forward(args)...); } ~ScopeCleanup() { cleanup_(); } private: FT cleanup_; }; template class ScopeFree{ public: ScopeFree(T* p) : _p(p) {} ~ScopeFree() {SAFE_FREE(_p);} private: T* _p; }; template class ScopeDelete{ public: ScopeDelete(T* p) : _p(p) {} ~ScopeDelete() {SAFE_DELETE(_p);} private: T* _p; }; template class ScopeDeleteArray{ public: ScopeDeleteArray(T* p) : _p(p) {} ~ScopeDeleteArray() {SAFE_DELETE_ARRAY(_p);} private: T* _p; }; template class ScopeRelease{ public: ScopeRelease(T* p) : _p(p) {} ~ScopeRelease() {SAFE_RELEASE(_p);} private: T* _p; }; template class ScopeLock{ public: ScopeLock(T& mutex) : _mutex(mutex) {_mutex.lock();} ~ScopeLock() {_mutex.unlock();} private: T& _mutex; }; #endif // H_SCOPE_H