Chinaunix首页 | 论坛 | 博客
  • 博客访问: 307518
  • 博文数量: 214
  • 博客积分: 4258
  • 博客等级: 上校
  • 技术积分: 2021
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-02 09:16
个人简介

http://blog.csdn.net/ly21st http://ly21st.blog.chinaunix.net

文章分类

全部博文(214)

文章存档

2018年(16)

2015年(1)

2014年(2)

2012年(22)

2011年(173)

分类: C/C++

2011-11-26 13:34:33

#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;
}
阅读(189) | 评论(0) | 转发(0) |
0

上一篇:消息处理示例

下一篇:定义值类型

给主人留下些什么吧!~~