- 出现问题的场景:例如
a[i]=a[j]
当i=j时,或者*pb=*pa
当pa和pb指向同一个对象时。 - 考虑自我赋值问题,则需要将this和rhs进行判等,但带来巨大开销;考虑异常安全问题,可以先备份原本的成员变量,再令原本的成员变量指向新的副本,最后return *this(如果在做副本时(使用不带nothrow的new)如果内存耗尽,则出现异常,直接等价于return *this)。
- 终极解决方案:copy-and-swap技术。(为什么好?见effective c++条款29)
- copy-and-swap实现:1) 创建rhs的副本 2) 将*this对象和副本做交换 3) return *this
- 代码细节较多,看书