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都是要增加的。