在C++中编写复制构造函数和赋值运算符的清单

Joh*_*ith 18 c++ copy-constructor assignment-operator

请编写复制构造函数和赋值运算符在C++中需要执行的任务列表,以保证异常安全,避免内存泄漏等.

Luc*_*tte 15

首先要确保你真的需要支持副本.大部分时间情况并非如此,因此禁用两者是可行的方法.

有时,您仍然需要在多态层次结构中为类提供重复,在这种情况下:禁用赋值运算符,编写(受保护的?)复制构造函数,并提供虚拟clone()函数.

否则,在你写一个价值类的情况下,你又回到了Coplien的正交规范形式的土地上.如果你有一个不能轻易复制的成员,你需要提供一个拷贝构造函数,一个析构函数,一个赋值运算符和一个默认构造函数.这个规则可以改进,例如:"大二法则"

我还建议看一下有关赋值运算符的C++ FAQ,以及复制和交换习惯用语以及GOTW.

  • @Adrian:如果赋值运算符使用了copy-and-swap,则不需要进一步的保护. (3认同)
  • 还可以防止赋值运算符中的自我赋值. (2认同)