复制构造函数和复制赋值运算符是否应具有相同的语句?

Should the copy constructor and copy assignment operator have the same statements?

本文关键字:复制 语句 构造函数 赋值运算符 是否      更新时间:2023-10-16

返回类型当然会有所不同,但概念是相同的:将数据从一个对象复制到另一个对象,对吗?

概念是根本不同的;复制构造函数创建一个不存在的新对象(并且不返回任何内容 - 甚至不返回void(,赋值运算符更新已经存在的对象。

No.当复制赋值运算符将数据复制到另一个对象时,复制构造函数使用复制的数据初始化对象。因此,它将使用其成员初始值设定项列表以递归方式调用其成员的复制构造函数,而复制赋值运算符将调用其他复制赋值运算符。

struct Foo {
Foo(Foo const &orig)
: data{oring.data} { }
Foo &operator = (Foo const &orig) {
data = orig.data;
return *this;
}
private:
std::string data;
};
copy constructor

使用已存在的对象初始化新对象。

copy assignment将一个对象的值分配给另一个对象,这两个对象都已经存在。