#include<iostream>
using namespace std;
//智能指针
class U_Ptr
{
friend class Hasptr;
int *ip;
size_t use;
U_Ptr(int *p):ip(p),use(1){}
~U_Ptr()
{
cout<<"u_ptr"<<endl;
//delete ip;
}
};
class Hasptr
{
public:
int *get_ptr() const
{
return ptr->ip;
}
int get_int() const
{
return val;
}
void set_ptr(int *p)
{
ptr->ip=p;
}
void set_ptr(int i)
{
val=i;
}
int get_ptr_val() const
{
return *ptr->ip;
}
int set_ptr_val(int val) const
{
*ptr->ip=val;
}
Hasptr(int *p,int i):ptr(new U_Ptr(p)),val(i)
{
cout<<ptr->use<<endl;
}//hasptr p;int i=40,p=&i
Hasptr(const Hasptr &orig):ptr(orig.ptr),val(orig.val) //hasptr p1;p1=p,
{
++ptr->use;
}
Hasptr& operator=(const Hasptr& has) //int j=2;hasptr q=&j;q=p
{
++has.ptr->use;
if(--ptr->use==0)
delete ptr;
ptr=has.ptr;
val=has.val;
return *this;
}
~Hasptr()
{
cout<<"已经释放"<<endl;
if(--ptr->use==0)
{
delete ptr;
}
}
private:
U_Ptr *ptr;
int val;
};
int main()
{
int i=40;
Hasptr p1(&i,40);
int *j=p1.get_ptr();
cout<<*j<<endl;
system("pause");
return 0;
}
c++ primer 智能指针
最新推荐文章于 2024-03-07 02:21:38 发布