何时使用重载赋值运算符?

use*_*241 5 c++

可能重复:
三个规则是什么?

当您需要定义自己的赋值运算符时?

Cha*_*via 12

通常,当您需要定义自己的复制构造函数时,您需要在相同的情况下定义自己的赋值运算符 - 即默认副本不会删除它.当您的对象管理动态分配的内存或需要特殊复制的其他资源时,会发生这种情况.

例如,如果您有一个管理指向动态分配内存的指针的类,则默认赋值运算符将只复制指针.通常,这不是您想要的 - 您希望每个对象实例都有自己的已分配数据的内部副本,因此您需要一个特殊的赋值运算符来分配自己的内存并执行副本.例如,这是std::vector复制或分配时需要执行的操作.

  • @cpx:实际上它更为通用:管理默认构造函数无法正确执行或不可用的任何类型的资源.这包括由指针保存的内存,还包括任何其他资源,例如`mutex` (3认同)