为什么C++中没有合并的Copy构造函数和赋值运算符?

Ibr*_*ish 3 c++

我确实理解将调用各个函数(复制构造函数和赋值运算符)的场景.这两个函数实际上都在执行相同的功能 - 为动态数据成员正确分配内存并从传递的参数对象复制数据,这样对象在数据中看起来都相同.为什么不在这种情况下,C++提供了一个统一的(一个函数),在这两个场景中都会调用它,而不是通过提供两个变体来复杂化?

Bat*_*eba 5

它们不一样,如果有人强迫它们,那将是一种痛苦.

复制构造是一种创建对象的方法.除此之外,还可以使用基本成员初始化程序.在多线程代码中,您不必过多担心构造函数中的互斥单元,因为您无法同时创建相同的对象!

赋值运算符做了一件完全不同的事情.它对已经存在的对象进行操作,并且应该返回对self的引用.一个实现可以在这里做一些微妙的不同的事情cf. 复制建设.例如,如果新分配的字符串较小,则字符串类可能不会释放资源.

在简单的情况下,它们可能会做同样的事情,并且丢弃了赋值的返回值.但在这种情况下,您可以依赖编译器自动生成的那些.