复制构造函数和赋值运算符

如果我重写operator=复制构造函数会自动使用新的操作符? 同样,如果我定义了一个拷贝构造函数,那么operator=自动“inheritance”拷贝构造函数的行为吗?

不,他们是不同的运营商。

复制构造函数用于创build一个新的对象。 它将一个现有的对象复制到一个新构造的对象中。复制构造器用于从一个旧实例初始化一个新实例。 在函数中将variables按值传递给函数或作为返回值传递时,不一定会调用它。

赋值运算符是处理一个已经存在的对象。 赋值运算符用于将现有实例更改为具有与右值相同的值,这意味着如果实例具有内部dynamic内存,则必须将该实例销毁并重新初始化。

有用的链接:

  • 复制构造函数,赋值运算符等
  • 在C ++中复制构造函数和=运算符重载:是一个常用函数吗?

不可以。除非你定义了一个拷贝,否则会生成一个默认值(如果需要的话)。 除非你定义了operator =,否则将会生成一个默认值(如果需要的话)。 他们不使用彼此,你可以独立地改变他们。

不,他们是不同的对象。

如果你担心复制构造函数和赋值运算符之间的代码重复,请考虑下面的习惯用法,命名复制和交换

 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; } }; 

这样, operator=将使用复制构造函数来构build一个新的对象,它将与*this交换,并在函数出口释放(与旧的内部)。

不,他们不是同一个运营商。

没有。

而且一定要看三条 规则 (或五条规则考虑rvalues)