下面实现一个指向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;
}
智能指针实现的结构如下图所示: