智能指针的简单实现

下面实现一个指向int的智能指针。 sub为辅助类,用于存储指针引用的状态。所有成员都是私有的,仅供autoptr类调用。

class sub{
    int * ptr;
    int count;
    friend class autoptr;
    sub(int * p) :ptr(p), count(1){}
    ~sub(){
        if (--count == 0)
            delete ptr;
    }
};

class autoptr{
public:
    autoptr(int * pBase) : psub(new sub(pBase)) {}
    autoptr(const autoptr & autop) : psub(autop.psub) { ++psub->count; }
    autoptr & operator = (const autoptr & autop){
        if (--psub->count == 0)//等号左侧减引用
            delete psub; 
        psub = autop.psub;
        ++psub->count;//增加原等号右侧引用数
        return *this;
    }
private:
    sub* psub;
};

int main(){
    int * p1 = new int(1);
    int * p2 = new int(2);
    autoptr ptr1(p1);
    autoptr ptr2(ap1);
    autoptr ptr3(p2);
    ptr3= ptr2;
    return 0;
}

智能指针实现的结构如下图所示:

智能指针的简单实现_第1张图片

你可能感兴趣的:(智能指针的简单实现)