辅导:在Copy构造和赋值操作中,复制对象的所有部分
来源:优易学  2011-11-25 12:23:17   【优易学:中国教育考试门户网】   资料下载   IT书店
  核心思想:Copy构造和赋值操作中,复制对象的所有部分。
  设计良好的类封装了内部状态,只有两个复制函数:Copy构造函数和赋值操作函数。条款5中谈了编译器合成的复制函数。
  当类中声明了Copy构造函数和赋值操作函数,即使有明显逻辑错误,编译器也不会报错。Mayers举了Customer类的例子:如果类中增加了新的成员变量,而没有更新相关复制函数,复制函数只复制对象的部分。
  有继承时问题更隐蔽。PriorityCustomer Copy构造函数复制了子类成员变量,但是没有复制基类成员变量。PriorityCustomer类初始化列表中没有基类Customer,故调用的是基类缺省构造函数(参见条款5),基类成员变量执行的是缺省初始化,而不是复制。对赋值操作函数情况稍有不同:基类成员变量保持原样而没有被赋值。
  解决方案是:同时复制基类部分。一般的,基类成员变量是private的,需要调用基类对应的复制函数。
  两个复制函数实现很相似,但是让一个复制函数调用另一个是错误的做法:
  - 赋值操作函数调用Copy构造是不合情理的。因为赋值操作函数是处理一个已经存在的对象,所以根本没有一种语法支持这样实现;
  - Copy构造调用赋值操作也是错误的。Copy构造函数初始化新对象,赋值函数处理已存在对象。将赋值函数用于未初始化的对象是不正确的。
  如果想消除重复代码,可以定义一个private成员函数供两种调用。

责任编辑:小草

文章搜索:
 相关文章
热点资讯
资讯快报
热门课程培训