effective c++ 条款12 赋值对象时勿忘其每一个成员

当我们自己为class设计 copy构造函数和copy assignment操作符时,如果我们漏掉一个成员变量时,编译器并不会友好的告诉你,当然有时候我们也是故意这样做。当我们担起“为派生类写copy 函数”时责任重大,必须也要小心的复制其base class部分 如下:

 

class Customer {};
class PriorityCustomer:public Customer{
public :
      PriorityCustomer(const PriorityCustomer& rhs);
      PriorityCustomer& operator= (const PriorityCustomer& rhs);
private:
    int priority;
}
PriorityCustomer::PriorityCustomer(const PriorityCustomer& rhs):Customer(rhs),  //调用基类的copy构造函数
priority(rhs.priority)
{
    
}
PriorityCustomer& PriorityCustomer::operator=(const PriorityCustomer& rhs)
{
    Customer::operator=(rhs);
    priority = rhs.priority;
    return *this;
}

由于copy构造函数和 copy assignment 函数很相似,难免不让我们产生互相调用对方的想法,所以我们需要澄清两点:

1.在copy assignment中调用copy构造函数是不合法的因为我们试图创建已经存在的对象。

2.相反在copy 构造函数里调用copy assignment也是不合法的,因为我们试图给没有初始化的变量赋值。。

 

 

 

posted @ 2013-05-14 21:41  onlycxue  阅读(169)  评论(0编辑  收藏  举报