The copy constructor and assignment operator
如果我重写
不,他们是不同的操作员。
复制构造函数用于创建新对象。它将现有对象复制到新构造的对象。复制构造函数用于从旧实例初始化新实例。实例。当按值将变量传递给函数时,不必调用它或者作为函数的返回值。
赋值运算符用于处理已经存在的对象。赋值运算符用于将现有实例更改为与右值相同,这意味着实例必须如果它有内部动态内存,则会被销毁并重新初始化。
有用链接:
- 复制构造函数、赋值运算符等
- C++中复制构造函数和=运算符重载:可能的公共函数吗?
否。除非定义了一个复制ctor,否则将生成一个默认值(如果需要)。除非定义运算符=,否则将生成默认值(如果需要)。它们互不使用,您可以单独更改它们。
不,它们是不同的物体。
如果您关心的是复制构造函数和赋值运算符之间的代码复制,请考虑以下术语,即copy and swap:
1 2 3 4 5 6 7 8 9 10 11 | struct MyClass { MyClass(const MyClass&); // Implement copy logic here void swap(MyClass&) throw(); // Implement a lightweight swap here (eg. swap pointers) MyClass& operator=(MyClass x) { x.swap(*this); return *this; } }; |
这样,
不,他们不是同一个操作员。
不。
一定要看看三定律(或考虑价值时的五条规则)