Effective C++ - 条款11 - operator=处理自我赋值问题

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