做完赋值操作后,那么就成为如下图所示了。红色标注的就是变化的部分:
而还要注意的是,重载赋值操作符的时候,一定要注意的是,检查自我赋值的情况。
如图所示:
此时,做p1 = p1的操作。那么,首先u1.use自增1,为2;然后,u1.use自减1,为1。那么就不会执行delete操作,剩下的操作都可以顺利进行。按《C++ primer》说法,“这个赋值操作符在减少左操作数的使用计数之前使rhs的使用计数加1,从而防止自身赋值”。哎,反正我是那样理解的。当然,赋值操作符函数中一来就可以按常规那样:
if(this == &rhs)
return *this;
运行结果如下图: