#include <conio.h>
#include <iostream.h>
#include <string>
// 智能指针的使用
using namespace std;
class HasPtr;
//默认是私有的
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()
{
if(--ptr->use==0)
delete ptr;
}
HasPtr(const HasPtr &oth):ptr(oth.ptr),val(oth.val){}
HasPtr& operator= (const HasPtr& oth);
int* get_ptr()const {return ptr->ip;}
int get_ptr_val()const {return *(ptr->ip);}
int get_int()const {return val;}
void set_ptr(int* p){ptr->ip=p;}
void set_int (int p) {val=p;}
void set_ptr_val(int i){*ptr->ip=i;}
private:
U_ptr *ptr;
int val;
protected:
};
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(void)
{
getch();
return 0;
}