Главная » Статьи » IT |
Шаблон аналог shared_ptr для COM-интерфейса
Для Хранения COM-интерфейса давно использую следующий шаблон. Обеспечивает тот же функционал для COM-интерфейса, которые обеспечивают shared_ptr/auto_ptr для объектов (автоприсваивание, автоудаление) ForceModify - Иногда требуется присвоить значение указателю. #include <stdlib.h> template< typename TypeInterface > class PtrCom { TypeInterface* m_ptr; public: PtrCom() : m_ptr(NULL) { } PtrCom(TypeInterface* arg) : m_ptr(arg) { } PtrCom(const PtrCom<TypeInterface>& arg) : m_ptr(NULL) { *this = arg; } ~PtrCom() { if(m_ptr) { m_ptr->Release(); m_ptr = NULL; } } void operator = (const PtrCom<TypeInterface>& arg) { if( m_ptr ) { m_ptr->Release(); m_ptr = NULL; } m_ptr = arg.m_ptr; TypeInterface** pp = const_cast<TypeInterface**>(&arg.m_ptr); *pp = NULL; } TypeInterface* operator -> () { return get(); } TypeInterface* get () { return m_ptr; } bool Is_null() const { return m_ptr == NULL; } operator bool() const { return !Is_null(); } void reset( TypeInterface* val) { if(m_ptr) { m_ptr->Release(); m_ptr = NULL; } m_ptr = val; } //! In some cases, assigning void ForceModify(TypeInterface* p) { m_ptr = p; } }; //_________________________________________________________________________ _________________________________________
| |
Просмотров: 331 | | |
Всего комментариев: 0 | |