条款12:复制对象时勿忘其每一个成分
?
? ? 对于一个简单的类的拷贝函数,我们可以这样写
class base{ public: int data; base& operator=(const base& a){ this->data = a.data; return *this; } };
? ? 拷贝构造函数的情况和赋值拷贝情况类似。如果这时,我们要改变这个类,增加一个double b,但是没有修改赋值函数的话,进行赋值就会把新添加的变量遗漏掉!所以说,当对类进行修改之后,不要忘记更新构造函数以及赋值函数。
? ??
? ? ?当存在继承关系时,如果把拷贝构造函数写成这样
class dev:public base{ public: int devdata; dev(const dev& a):base(a),devdata(a.devdata){} };
?就会把基类的初始化给遗漏掉,应该要注意对基类的部分进行初始化
class dev:public base{
public:
int devdata;
dev(const dev& a):base(a),devdata(a.devdata){}
};
?对于赋值运算符,我们应该写成
class dev:public base{ public: int devdata; dev(const dev& a):base(a),devdata(a.devdata){} dev& operator=(const dev& a){ base::operator=(a); devdata = a.devdata; return *this; } };
?
原文:http://bbezxcy.iteye.com/blog/2242184