Copy构造和赋值操作中,复制对象的所有部分

Copy构造和赋值操作中,复制对象的所有部分,第1张

Copy构造和赋值操作中,复制对象的所有部分,第2张

核心思想:复制对象的所有部分,在建造和分配副本。
设计良好的类封装了内部状态,复制函数只有两个:复制构造函数和赋值操作函数。由编译器合成的复制函数将在第5章中讨论。
在类中声明复制构造函数和赋值操作函数时,即使有明显的逻辑错误,编译器也不会报错。Mayers举了一个Customer类的例子:如果一个新的成员变量被添加到类中而没有更新相关的copy函数,copy函数只复制对象的一部分。
有继承的时候问题更隐蔽。PriorityCustomer复制构造函数复制子类成员变量,但不复制基类成员变量。PriorityCustomer类的初始化列表中没有基类Customer,所以调用基类的默认构造函数(见第5条),基类的成员变量默认初始化而不是复制。赋值操作函数的情况略有不同:基类成员变量保持原样,没有被赋值。
解决方法是同时复制基类部分。一般基类成员变量是私有的,需要调用基类对应的复制函数。
两个复制函数在实现上是相似的,但是让一个复制函数调用另一个是错误的:
-赋值操作函数调用复制构造是不合理的。因为赋值函数处理一个现有的对象,所以没有语法来支持这个实现。
-copy构造调用的赋值操作也是错误的。复制构造函数初始化新对象,赋值函数处理现有对象。对未初始化的对象使用赋值函数是不正确的。
如果要消除重复代码,可以为两个调用定义一个私有成员函数。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » Copy构造和赋值操作中,复制对象的所有部分

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情