???????????????????????????????????????????????????麯??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????

????????????????????????

????1??????????effective c++ ????????????У?????????????????е??????????????????????????????????黯??????????????????

class base {
//????????????????????????麯???????乹????????
      public:
           ....
};
class derive1??public base {
      public:
           ....
};
class derive1??public base {
//???????κδ??麯??
      public:
           ....
};
class derive2??public base {
//???????κδ??麯??
      public:
           ....
};
class  object {
      public:
         ...
       private:
           list components;
};

???????????????У?class object???????list???????????base?????????????base?????????????????list?е?????????derive1?????derive2???????????????????

??????object????????????????????????

object:object(base* b) {
      if(b) {
          components.push_back(b);//???????base???????????components listβ??   
     }
}

????2??????????????????“?麯???????????”?????е?????????????c++????????????????????????derived class?????????base class??????麯??????????????????????????????????????????????????????????????????????????????base class?????derived class???????????????????????????base class??derived class?????????c++??????????????????????virtual copy constructors???????????

class base {
      public:
//????virtual copy constructor
           virtual base *clone() const=0;
            ....
};
class derive1??public base {
//????virtual copy constructor
           virtual derive1 *clone() const
           {
                    return new derive1(*this);
            }
            ....
};
class derive2??public base {
//????virtual copy constructor
           virtual derive2 *clone() const
           {
                    return new derive2(*this);
            }
            ....
};
class  object {
      public:
          object(const base& rhs);
         ...
       private:
           list components;
};

????object??????????У?

object:object(const base& rhs) {
      for(list::const_iterator it=rhs.components.begin();it!=rhs.components.end();it++) {
          components.push_back((*it)->clone());//???????base???????????components listβ??   
     }
}

??????????????????????????????????????????????麯?????????????????????????????????黯??Ч????