smartpointer.h
来自「CMXBTree 的主要作用是在内存中建立一棵B+树」· C头文件 代码 · 共 67 行
H
67 行
#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 + =
减小字号Ctrl + -
显示快捷键?