在C++ primer 中文第四版 :
定义如下的类:
// 定义智能指针,引入使用计数 reference count
class u_ptr{
friend class HasPtr;
int *p;
size_t use;
u_ptr(int *p):p(p),use(1){}
~u_ptr(){delete p;}
};
// 重定义的HasPtr类
class HasPtr{
public:
HasPtr(int *p,int i):ptr(new u_ptr(p)),val(i){}
HasPtr(const HasPtr &orig):ptr(orig.ptr),val(orig.val){
++ptr->use;
}
HasPtr & operator=(const HasPtr &oring){
++oring.ptr->use;
if (--ptr->use==0)
{
delete ptr;
}
ptr=oring.ptr;
val=oring.val;
return *this;
}
int get_reference_use() const{
return ptr->use;
}
~HasPtr(){
if (--ptr->use==0)
delete ptr;
}
private:
u_ptr *ptr;
int val;
};
Main函数测试:
int main()
{
int *ip=new int(10);
HasPtr *a=new HasPtr(ip,22);
HasPtr b(*a);
HasPtr c(b);
cout<<b.get_reference_use()<<endl; // 结果:3
delete a;
cout<<b.get_reference_use()<<endl; // 结果: 2
return 0;
}