ksacvet777.moy.su
Главная » Статьи » IT

Шаблон аналог shared_ptr для COM-интерфейса
Для Хранения COM-интерфейса давно использую следующий шаблон.
Обеспечивает  тот же функционал для COM-интерфейса, которые обеспечивают shared_ptr/auto_ptr для объектов (автоприсваивание, автоудаление)
 

ForceModify - Иногда требуется присвоить значение указателю.
 


#include <stdlib.h>


templatetypename 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;
    }



};

//_________________________________________________________________________




_________________________________________
Категория: IT | Добавил: ksacvet777 (23.01.2014)
Просмотров: 317 | Теги: sharet, Windows, Template, Win, ptr, шаблон, Interface, интерфейс, аналог, com | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *: