C++设计模式之代理模式

2020-01-06 13:01:57王冬梅

        m_pReference->AddRef();
    }
 
    ~SmartPtr(void)
    {
        if (m_pReference && m_pReference->Release() == 0)
        {
            SAFE_DELETE(m_pData);
            SAFE_DELETE(m_pReference);
        }
    }
 
    inline T& operator*()
    {
        return *m_pData;
    }
 
    inline T* operator->()
    {
        return m_pData;
    }
 
    SmartPtr<T>& operator=(const SmartPtr<T>& sp)
    {
        if (this != &sp)
        {
            if (m_pReference && m_pReference->Release() == 0)
            {
                SAFE_DELETE(m_pData);
                SAFE_DELETE(m_pReference);
            }
 
            m_pData = sp.m_pData;
            m_pReference = sp.m_pReference;
            m_pReference->AddRef();
        }
 
        return *this;
    }
 
    SmartPtr<T>& operator=(T* pValue)
    {
        if (m_pReference && m_pReference->Release() == 0)
        {
            SAFE_DELETE(m_pData);
            SAFE_DELETE(m_pReference);
        }
 
        m_pData = pValue;
        m_pReference = new KRefCount;
        m_pReference->AddRef();