clone() implementieren?



  • Hallo,
    ich habe ungefähr folgendes `Gebilde´, nur mit dem Unterschied das die Models (noch) kein clone() haben sondern andere Methoden..

    class abstract_model {
      virtual ~abstract_model() = 0;
      virtual abstract_model *clone();
    };
    
    class concrete_model_a : public abstract_model {
      virtual concrete_model_a *clone();
    };
    
    class concrete_model_b : public abstract_model {
      virtual concrete_model_b *clone();
    };
    
    class manager {
      manager() : model_(0) {
      }
    
      manager & operator =(manager const & m) {
        if(model_)
          delete model_;
        model_ = m.model_->clone();
      }
    
      abstract_model *model_;
    };
    

    Mein Problem ist jetzt das ich beim Copy-Constructor oder op= bei der manager-Klasse nicht genau weiß welches model ich jetzt kopieren muss.
    Deshalb dachte ich das ich eine virtuelle clone() Methode, ähnlich wie in Java, schreibe. Ich weiß nur leider nicht wie ich clone() so schreibe das sie in der Klasse-Hierarchie von unten nach oben durchläuft. (abstract_model->clone() muss auch aufgerufen werden)

    Oder gibt es vielleicht sogar eine andere (bessere) Möglichkeit? 🙂



  • concrete_model_a* concrete_model_a::clone()
    {
        return new concrete_model_a (*this);
    }
    concrete_model_b* concrete_model_b::clone()
    {
        return new concrete_model_b (*this);
    }
    

    Dieses Vorgehen benötigt einen funktionsfähigen Kopierkonstruktor.


Anmelden zum Antworten