一、自我赋值现象

由于指针和引用的存在,还有多态,使得存在自我赋值的现象。

条款11:在operator = 中处理“自我赋值”

 

二、自我赋值存在的隐患

条款11:在operator = 中处理“自我赋值”

这里存在的问题是 pb 和 rhs指向同一个对象的时候,,,,,,

 

条款11:在operator = 中处理“自我赋值”

仍然存在隐患:new失败怎么办?pb指向一块被删除的内存。

 

条款11:在operator = 中处理“自我赋值”

行得通,但是效率不高

 

三、copy and swap技术

 

这个技巧在《C++ primer》中详细有介绍。

条款11:在operator = 中处理“自我赋值”

 

总结:

1、确保当对象自我赋值时 operator=有良好行为。其中技术包括比较“来源对象”和“目标对象”的地址、精心周到的语句顺序、以及copy-and-swap

2、确定任何函数如果操作一个以上的对象,而其中多个对象是同一个对象时,其行为仍然正确。

相关文章:

  • 2021-10-23
  • 2021-10-18
  • 2022-01-18
  • 2021-06-27
  • 2021-10-19
  • 2021-07-10
  • 2021-10-02
  • 2021-09-27
猜你喜欢
  • 2022-12-23
  • 2021-10-14
  • 2021-09-19
  • 2022-12-23
  • 2022-12-23
  • 2022-02-09
  • 2021-06-05
相关资源
相似解决方案