KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I have a base class that basically wraps up attaching a class to a arbitrary windows handle (e.g, HWND, HFONT), and uses a policy class to attach/detach and destroy: // class SmartHandle template<typename THANDLE, class TWRAPPER, class TPOLICY> class SmartHandle : boost::noncopyable { private: TPOLICY* m_pPolicy; // Policy bool m_bIsTemporary; // Is this a temporary window? SmartHandle(); // no default ctor SmartHandle(const SmartHandle<THANDLE, TWRAPPER, TPOLICY>&); // no cctor protected: THANDLE m_hHandle; // Handle to the underlying window TPOLICY& policy() {return(*m_pPolicy);}; // ctor that attaches but is temporary SmartHandle(const THANDLE& _handle, bool _temporary) : m_hHandle(_handle) , m_bIsTemporary(_temporary) { m_pPolicy = new TPOLICY(reinterpret_cast<TWRAPPER&>(*this)); if(_handle) m_pPolicy->attach(_handle); }; // eo ctor // move ctor SmartHandle(SmartHandle<THANDLE, TWRAPPER, TPOLICY>&& _rhs) : m_hHandle(_rhs.m_hHandle) , m_bIsTemporary(_rhs.m_bIsTemporary) { m_pPolicy = new TPOLICY(reinterpret_cast<TWRAPPER&>(*this)); m_pPolicy->attach(m_hHandle); const_cast<SmartHandle&>(_rhs).m_hHandle = NULL; }; // eo mtor // dtor virtual ~SmartHandle() { if(m_hHandle) { m_pPolicy->detach(m_hHandle); if(!m_bIsTemporary) m_pPolicy->destroy(m_hHandle); m_hHandle = NULL; }; delete(m_pPolicy); m_pPolicy = NULL; }; // eo dtor Note that I've declared the copy constructor private (with no implementation) as I do not want the class to be copied, but a move is allowed. My Win
Tags (comma-separated)
Save Edits
Cancel