Copy Konstruktor (tiefe Kopie)



  • Hallo Community!

    Ich soll fuer folgende Klasse einenCopy Konstruktor (tiefe Kopie) angeben. Meine Versuche brachten nur Fehlermeldungen. Ich muss gestehen das ich denn Sinn dieses Konstruktors noch nicht ganz verstanden habe und mir den Code aus google zusammengesucht habe...kann mir wer helfen?

    Lg
    Caro

    class Zufallszahlen{
    private:
    int *zahlen;
    int anzahl;
    public:
    Zufallszahlen(int n):anzahl(n)// Konstruktor
    {
    zahlen=new int[n];
    // Mit Zufallszaheln fuellen
    for(int i=0;i<n;i++)
    {
    zahlen[i]=(rand()%n)+1;
    }
    }
    ~Zufallszahlen() {delete[] zahlen;} // Destruktor

    Zufallszahlen& Zufallszahlen::operator =(const Zufallszahlen& v)
    {
    if(this == &v)
    {
    return *this; // Schutz vor Selbstzuweisung
    }
    anzahl=v.anzahl;
    int *zahlen=new int[v.zahlen];
    return *this;
    }
    };



  • Das, was du da machen willst ist kein Copy Constructor, sondern ein Zuweisungsoperator (assignment operator) und der lässt sich üblicherweise sehr einfach implementieren, nämlich mit dem Copy/Swap Idiom. Such mal danach. Da findest du bestimmt ein Haufen dazu.

    Und das nächste mal bitte mit cpp-Tags (gleich unter dem Smileys).



  • Hmmmm....ist dann mein gesuchter Copy Konstruktor

    Zufallszahlen(const Zufallszahlen&);

    ?



  • Ja.



  • Ja, genau. Der Kopierkonstruktor nimmt als Argument eine Const-Referenz auf eine Instanz der eigenen Klasse und bestimmt die Semantik, mit der die Instanz kopiert wird. In vielen Fällen (wenn du z.B. keine manuelle Speicherverwaltung hast) reicht der vom Compiler generierte Kopierkonstruktor, welcher Member für Member kopiert.



  • dankeschön!


Anmelden zum Antworten