64,282
社区成员
发帖
与我相关
我的任务
分享
#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<<"delete U_Ptr"<<endl;
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;
cout<<ptr->use<<endl;
}
HasPtr&operator=(const HasPtr&);
~HasPtr()
{
if(--ptr->use==0)
{
delete ptr;
}
cout<<"delete ptr "<<ptr->use<<endl;
}
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()
{
int obj;
HasPtr p1(&obj,42);
std::cout<<"********************************"<<std::endl;
HasPtr p2(p1);
std::cout<<"********************************"<<std::endl;
HasPtr p3(p1);
std::cout<<"********************************"<<std::endl;
return 0;
}