参考《C++ Primer》(第四版)
class U_Ptr {
friend class Has_Ptr;
int *p;
size_t use;
U_Ptr(int *p):ip(p),use(1){}
~U_Ptr(){delete ip;}
};
class Has_Ptr {
public:
Has_Ptr(int *p, int i):ptr(new U_Ptr(p)),val(i){}
Has_Ptr(const Has_Ptr &orig):ptr(orig.ptr),val(orig.val){++ptr->use;}
Has_ptr operator=(const Has_Ptr &rhs){
++rhs.ptr->use;
if(--ptr->use==0)delete ptr;
*ptr=*rhs.ptr;
val=rhs.val;
return *this;
}
~Has_Ptr(){if(--ptr.use==0)delete ptr;}
private:
U_Ptr *ptr;
int val;
};