首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

C++Primer 智能指针 疑惑解决办法

2012-04-08 
C++Primer 智能指针 疑惑C++Primer 的424页中对智能指针的复制操作符为什么先要自加,后又自减?24 HasPtr&

C++Primer 智能指针 疑惑
C++Primer 的424页中对智能指针的复制操作符为什么先要自加,后又自减?

 24 HasPtr& HasPtr::HasPtr operator=(const HasPtr& rhs)  
 25 {
 26 ++rhs.ptr->count;
 27 if(--rhs.ptr->count == 0)
 28 delete ptr;
 29 ptr = rhs.ptr;
 30 val = rhs.val;
 31 return *this;
 32 }

网上有说是为了防止自身赋值,那如果有个HasPtr A = A;的语句,过程会是怎样的呢?这是所有类的定义
  3 class U_ptr{
  4 friend class HasPtr;
  5 size_t count;
  6 int *ptr;
  7 U_ptr(int *p): ptr(p), count(1) { }
  8 ~U_ptr() { delete ptr;}
  9 };
 


 11 class HasPtr{
 12 private :
 13 int num;
 14 U_ptr *ptr;
 15 prublic :
 16 HasPtr(int *p,int i): ptr(new U_ptr(p)), num(10) { }
 17 HasPtr(const HasPtr& content):
 18 ptr(content.ptr), num(content.num) { ptr->count++;}
 19 HasPtr operator=(const HasPtr&);
 20 ~HasPtr() { if(--ptr->count == 0) delete ptr;}
 21 
 22 };

本人初学C++,希望解答越详细越好 。。。。



[解决办法]
肯定是rhs的count先加。因为你不知道 rhs是否和this指针所指对象是同一个对象。所以先加rhs的。因为无论是否是同一个对象rhs的count都是要增加的。

热点排行