复制构造函数和赋值运算符
如果我重写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)