我确实理解将调用各个函数(复制构造函数和赋值运算符)的场景.这两个函数实际上都在执行相同的功能 - 为动态数据成员正确分配内存并从传递的参数对象复制数据,这样对象在数据中看起来都相同.为什么不在这种情况下,C++提供了一个统一的(一个函数),在这两个场景中都会调用它,而不是通过提供两个变体来复杂化?
它们不一样,如果有人强迫它们,那将是一种痛苦.
复制构造是一种创建对象的方法.除此之外,还可以使用基本成员初始化程序.在多线程代码中,您不必过多担心构造函数中的互斥单元,因为您无法同时创建相同的对象!
赋值运算符做了一件完全不同的事情.它对已经存在的对象进行操作,并且应该返回对self的引用.一个实现可以在这里做一些微妙的不同的事情cf. 复制建设.例如,如果新分配的字符串较小,则字符串类可能不会释放资源.
在简单的情况下,它们可能会做同样的事情,并且丢弃了赋值的返回值.但在这种情况下,您可以依赖编译器自动生成的那些.
| 归档时间: |
|
| 查看次数: |
72 次 |
| 最近记录: |