返回类型当然会有所不同,但是概念是相同的:将数据从一个对象复制到另一个对象,对吗?
概念是根本不同的;复制构造函数会创建一个不存在的新对象(并且不会返回任何内容,甚至void
也不会返回),并且赋值运算符会更新一个已存在的对象。
没有复制分配运算符确实将数据复制到另一个对象时,复制构造函数使用复制的数据初始化new对象。这样,它将使用其成员初始化器列表来递归调用其成员的副本构造函数,而copy-assignment运算符将调用其他copy-assignment运算符。
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
将一个对象的值分配给另一个已经存在的对象。