удаление и возвращение через шаблон
От: Bug_z Австрия  
Дата: 06.07.04 10:32
Оценка:
есть шаблон
template<class T, const IID* piid>
class IUnknownImp : public T
{
public:
  IUnknownImp()
  {
    m_lRef = 0;
  }
  virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID iid, void** ppv)
  {
    if (iid == IID_IUnknown || iid == *piid || iid == IID_IDispatch)
    {
      *ppv = (T*)this;
      AddRef();
      return ( S_OK ) ;
    }
    return ( E_NOINTERFACE );
  }
  virtual ULONG STDMETHODCALLTYPE AddRef ()
  {
    ++m_lRef;
    return m_lRef;
  }
  virtual ULONG STDMETHODCALLTYPE Release()
  {
    if ( --m_lRef == 0 )
    {
      delete this;
      return 0;
    }
    else
      return m_lRef;
  }
private:
  DWORD m_lRef;
};


я создаю свой класс —
class CMyClass : public IUnknownImp<IMyInterface, IID_IMyInterface>
{
}


будет ли такая реализация работать правильно? при таком наследовании this в шаблоне будет указывать на CMyClass?
CMyClass object;
object->QueryInterface(....);
object->Release();
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.