Core List
1. 拷贝构造函数和赋值构造函数
(1) 拷贝构造函数
Customer::Customer(const Customer& rhs) : name(rhs.name) {}
(2) 赋值构造函数
Customer& Customer::operate= (const Customer& rhs) {
name = rhs.name;
return *this; // 见条款10
}
2. 遗忘部分成员赋值问题
(1) 当类中新增成员变量时,拷贝构造函数和赋值构造函数均需要同步
(2) 派生类的拷贝构造函数和赋值构造函数要确保基类部分成员的复制
PriorityCustomer::PriorityCustomer (const PriorityCustomer& rhs) : Customer(rhs), priority(rhs.priority); // 调用基类的拷贝构造函数
PriorityCustomer::operate= (const PriorityCustomer &rhs) {
Customer::operate= (rhs); // 调用基类的赋值构造函数来赋值基类成分
priority = rhs.priority;
return *this;
}
3. 拷贝构造函数和赋值构造函数的相互调用
(1) 调用拷贝构造函数来实现构赋值造函数 (构造一个已经存在的对象)// 错误
(2) 调用赋值构造函数来实现拷贝构造函数(在一个未初始化的对象身上,使用一个只对已初始化对象的操作)// 错误
注:不要尝试将拷贝构造函数和赋值构造函数进行互相调用。