next up previous contents
Next: Zugriffsprivilegien: private, public Up: Klassen Previous: Konstruktion von Objekten

Kopieren und Zuweisung von Objekten

Im Falle, daß Strukturen nur Elemente der eingebauten Typen enthalten, reicht eine bitweise Kopie der Einzelelemente, um eine Kopie der gesamten Struktur zu erstellen. Damit lassen sich solche Objekte auf dem Stack ablegen oder aufeinander zuweisen. Solche einfachen Klassen oder Strukturen kann man daher bereits an Unterprogramme übergeben oder als Resultate zurückerhalten.

class POD {              // POstal Data
  public:
  int    a;
  double b;
};

POD do_something(POD p){  // call copy ctor in POD p to create the copy
  // do something with p, return changed p 
  return p;               // copy ctor called in return, then 
                          //   dtor called on p
}

Für solche Fälle stellt der Compiler einen Default-Kopier-Kontruktor bereit, der im Falle solcher traditioneller Strukturen bitweise Kopien anfertigt. Für benutzerdefinierte Klassen bewirkt der compilergenerierte Kopierkonstruktor den Aufruf aller Kopierkonstruktoren der Datenelemente der Klasse in der Reihenfolge ihrer Deklaration. Damit ist z.B. unsere Person einwandfrei zu kopieren, obwohl zwei Datenelemente sogar benutzerdefinierte Klassen sind. Typische Fällen, in denen der generierte Kopierkonstruktor nicht ausreicht, sind solche, in denen bereits der reguläre Konstruktor die Anforderung einer Resource vornahm, etwa dynamisch Speicherplatz anforderte oder eine Datei öffnete.

Ähnliche Überlegungen gelten für die Zuweisung. Auch hier stellt der Compiler einen Zuweisungsoperator bereit, der seinerseits die Zuweisungsoperatoren der Datenelemente der Klasse aufruft. Auch dieser ist in der Regel nur dann nicht mehr ausreichend, wenn in den Konstruktoren ungewöhnliche Resource angefordert werden.


next up previous contents
Next: Zugriffsprivilegien: private, public Up: Klassen Previous: Konstruktion von Objekten
© R.Hilfer et al., ICA-1, Univ. Stuttgart
28.6.2002