#include
using namespace std;
class U_Ptr {
friend class Has_Ptr;
int *ip;
size_t use;
U_Ptr(int *p): ip(p),use(1) {}
~U_Ptr() { delete ip; }
};
class Has_Ptr {
public:
Has_Ptr(int *p,int i): ptr(new U_Ptr(p)),val(i) {}
Has_Ptr(const Has_Ptr &rptr):ptr(rptr.ptr), val(rptr.val)
{
ptr->use++;
}
Has_Ptr& operator=(const Has_Ptr &rptr)
{
if (&rptr != this) {
if(--ptr->use == 0)
delete ptr;
val=rptr.val;
ptr=rptr.ptr;
ptr->use++;
}
return *this;
}
~Has_Ptr() {
if (--ptr->use == 0)
delete ptr;
}
int *get_ptr() const { return ptr->ip;}
int get_int() const { return val;}
void set_ptr(int *p) { ptr->ip=p; }
/////此处有异议,ptr->ip原来的值由谁来释放???
// void set_ptr(int *p) { free(ptr->ip); ptr->ip=p; }
void set_int(int i) { val=i; }
int get_ptr_val() const { return *ptr->ip; }
void set_ptr_val(int i) { *ptr->ip =ip; }
private:
U_Ptr *ptr;
int val;
};
int main()
{
getchar();
return 0;
}
阅读(219) | 评论(0) | 转发(0) |