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

标签 c++ copy-constructor copy-assignment

我明白在什么情况下调用哪个...

Sample a;
Sample b = a; //calls copy constructor
Sample c;
c = a;        //calls assignment operator

我的问题是为什么这两种不同的东西存在?为什么不能只有两者之一来处理这两种情况?

最佳答案

不,它们是不同的。

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

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

尽管如此,它们的功能非常相似,所以您通常可以共享它们的实现。如:What is the copy-and-swap idiom?

关于c++ - 为什么不只有一个?复制构造函数和赋值运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24778327/

相关文章:

c++ - 模板构造函数没有匹配的函数调用错误

c++ - C 和汇编程序实际上编译成什么?

c++ - 复制构造函数。有用

c++ - 没有已知的参数 1 从 ‘Image*’ 到 ‘const Image&’ 的转换

c++ - 为什么在 C++ 中分配对象的地址不会改变?

c++ - 将参数从一个类传递到另一个类

c++14 static constexpr auto 与 odr 用法

C++ 重载运算符、构造函数等

c++ - 免费(): double free detected in tcache 2 in C++

C++ 如何在数组中存储对象而不删除它们