#include<iostream>
using namespace std;
/*智能指针类*/
/*每次创建类的新对象时,初始化指针并将使用计数置为1
当对象作为另一个对象的副本而创建时,复制构造函数复制指针并增加与之相应的使用计算器的值
对一个对象进行赋值时,赋值操作符减少左操作数所指对象的使用计数的值,如果减至0则删除对象,
并增加右操作数所指对象的使用计数的值。
最后调用析构函数,析构函数减少使用计数的值,如果计数减至0,则删除基础对象*/
/*计数器类*/
class U_Ptr{
friend class HasPtr;
int *ip;
size_t use;
U_Ptr(int *p):ip(p),use(1){}
~U_Ptr(){delete ip;}
};
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&);
~HasPtr()
{
if(--ptr->use==0)
delete ptr;
}
private:
U_Ptr *ptr;//指向计算器类的指针
int val;
};
HasPtr& HasPtr::operator =(const HasPtr& rhs)
{
++rhs.ptr->use;
if(--ptr->use==0)
delete ptr;
ptr=rhs.ptr;
val=rhs.val;
return *this;
}
int main()
{
return 0;
}
未完待续