📄 smartpointer.h
字号:
#ifndef _SMARTPONTER_H_
#define _SMARTPONTER_H_
class RefCount {
int m_nRefs;
protected:
virtual void DestroyMe( void ) = 0;
public:
RefCount(void) { m_nRefs = 0; }
//virtual ~RefCount() { }
void upcount(void) { ++m_nRefs; }//TRACE("up to %d\n", m_nRefs);}
void downcount(void)
{
if (--m_nRefs == 0)
{
DestroyMe();
//delete this;
}
//else
//TRACE("downto %d\n", m_nRefs);
}
};
template <class T> class SmartPtr {
T* p;
public:
SmartPtr(T* p_) : p(p_)
{
if( p ) p->upcount();
}
SmartPtr(SmartPtr<T> &p_)
{
p = (T *) p_;
if( p ) p->upcount();
}
SmartPtr( void ): p( NULL )
{
}
~SmartPtr(void)
{
if( p ) p->downcount();
}
operator T*(void) { return p; }
T& operator*(void) { return *p; }
T* operator->(void) { return p; }
SmartPtr& operator=(SmartPtr<T> &p_)
{return operator=((T *) p_);}
SmartPtr& operator=(T* p_)
{
if( p ) p->downcount();
p = p_;
if( p ) p->upcount();
return *this;
}
};
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -