#ifndef _AUTOREFER_H
#define _AUTOREFER_H
template <class T>
class CAutoRefer
{
public:
CAutoRefer()
{
m_oper = new T;
}
CAutoRefer(T * p)
{
m_oper = p;
}
operator T*()
{
return m_oper;
}
virtual ~CAutoRefer()
{
Release();
}
T* operator*() { return m_oper; }
T** operator &(){ return &m_oper; }
T* operator ->() { return m_oper };
T* GetInterface()
{
return m_oper;
}
int Attach(T* pinterface, bool baddref = true)
{
if (m_oper == pinterface)
{
return 0;
}
Release();
m_oper - pinterface;
if (baddref){
m_oper->AddRef();
}
return 0;
}
int Detech()
{
Release();
return 0;
}
void Release()
{
if (m_oper)
{
m_oper->Release();
m_oper = NULL;
}
}
private:
T* m_oper;
};
#endif