c++ - 在 C++ 中编写复制构造函数和赋值运算符的 list

标签 c++ copy-constructor assignment-operator

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

最佳答案

首先确定您确实需要支持拷贝。大多数情况下并非如此,因此禁用两者是可行的方法。

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

否则,如果您正在编写一个值类,您将回到 Coplien 的正交规范形式的领域。如果您有一个无法简单复制的成员,则需要提供一个复制构造函数、一个析构函数、一个赋值运算符和一个默认构造函数。此规则可以细化,例如:The Law of The Big Two

我还建议您查看 C++ FAQ regarding assignment operators ,并在 copy-and-swap idiomGOTW .

关于c++ - 在 C++ 中编写复制构造函数和赋值运算符的 list ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/214891/

相关文章:

c++ - 使用 C++ 获取 vector<cv::Vec3b> 中出现次数最多的值

c++ - 如何在 Visual Studio 2015 中添加第三方库?

c++ - C++ 中的可移植 wchar_t

c++ - 如何方便快捷的存储一个大词库?

c++ - 以对象为参数的构造函数

c++ - 为什么在删除 `copy constructor`后仍使用 `move constructor`?

c++ - 自毁:this->MyClass::~MyClass() vs. this->~MyClass()

c++ - 如何为具有私有(private)对象作为属性的类编写移动构造函数和赋值运算符?

c++ - 可以(重新)分配来自不同容器的迭代器吗?

c++ - 为什么移动构造函数会影响 is_assignable?