C++中智能指针的设计和使用(2)

这里的赋值操作符比较麻烦,且让我用图表分析一番:

假设现在又两个智能指针p1、 p2,一个指向内容为42的内存,一个指向内容为100的内存,如下图:

C++中智能指针的设计和使用

现在,我要做赋值操作,p2 = p1。对比着上面的

HasPtr& operator=(const HasPtr&);   // 赋值操作符 

此时,rhs就是p1,首先将p1指向的ptr的use加1,

++rhs.ptr->use;     // 增加右操作数中的使用计数 

然后,做:

if (--ptr->use == 0) 

        delete ptr; 

因为,原先p2指向的对象现在p2不在指向,那么该对象就少了一个指针去指,所以,use做自减1;

此时,条件成立。因为u2的use为1。那么,运行U_Ptr的析构函数,而在U_Ptr的析构函数中,做了delete ip操作,所以释放了内存,不会有内存泄露的问题。

接下来的操作很自然,无需多言:

ptr = rhs.ptr;   // 复制U_Ptr指针  

    val = rhs.val;   // 复制int成员  

    return *this

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/0466372c9753b5b50c4fbec0d40b9963.html