正文
1.自我赋值是如何发生的
当一个对象委派给自己的时候,自我赋值就会发生:
1 class Widget { ... };2 3 Widget w;4 5 ...6 7 w = w; // assignment to self、这看上去是愚蠢的,但这是合法的,所以请放心,客户端是可以这么做的。此外,自身赋值也并不总是很容易的能够被辨别出来。举个例子:
1 a[i] = a[j]; // potential assignment to self
上面的代码在i和j相等的情况下就是自我赋值,同样的,看下面的例子:
*px = *py; // potential assignment to self
如果px和py恰巧指向同一个东西,那么上面的语句就是自身赋值。这些并不怎么明显的自我赋值是使用别名的结果:也就是使用不止一种方法来指向同一个对象。一般情况下,当我们操作指向不同同类型对象的引用和指针时,需要考虑这些不同的对象是否是同一个对象。事实上,如果两个对象来自同一个继承体系,这两个对象甚至不必声明为同类型的,因为基类的指针或者引用可以指向派生类对象:
延伸阅读
学习是年轻人改变自己的最好方式
