template <class T>
class AutoPtr
{
public:
AutoPtr(T* _p):pref(new RefPtr( _p))
{
}
~AutoPtr()
{
if( pref->iRef == 1 )
{
delete pref ;
}
}
T& operator *()
{
return (* pref->p);
}
AutoPtr& operator = ( const AutoPtr& obj)
{
obj.pref->iRef++;
if(pref->iRef==1 )
{
delete pref ;
pref=NULL;
}
pref = obj.pref ;
return *this;
}
private:
class RefPtr
{
friend class AutoPtr ;
RefPtr( T *_p):p(_p),iRef(1)
{
}
~RefPtr()
{
delete p;
p=NULL;
}
int iRef ;
T *p ;
} ;
RefPtr *pref;
} ;
c++智能指针
最新推荐文章于 2022-10-02 22:45:03 发布