[置顶] c++智能指针


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;
} ; 

你可能感兴趣的:(智能指针)