为什么不只有一个?复制构造函数和赋值运算符

Nig*_*rry 5 c++ copy-constructor copy-assignment

我了解在什么情况下会调用哪个...

Sample a;
Sample b = a; //calls copy constructor
Sample c;
c = a;        //calls assignment operator
Run Code Online (Sandbox Code Playgroud)

我的问题是,为什么这两种不同的东西都存在?为什么只有两者之一不能同时解决这两种情况?

son*_*yao 6

不,他们不同。

复制构造函数用于构造一个新对象(从另一个对象)。在这种情况下,您只需要初始化成员即可。

赋值运算符用于现有对象(您可能已通过默认构造函数等构造了它),然后由另一个对象赋值。在这种情况下,您需要重新初始化成员,有时意味着销毁并再次初始化它们。

即使如此,它们的功能是如此相似,因此您通常可以共享它们的实现。如:什么是复制和交换惯用法?