Diese drei Methoden sind essentielle Bestandteile jeder C++ Klasse.
Sie werden
von C++ automatisch erzeugt falls nicht explizit definiert.
-
copy constructor Deklaration:
My3Vector(My3Vectcr & v);
und Verwendung:
My3Vector c(b);
-
= Operator Deklaration:
My3Vector & operator = ( My3Vector & x)
und Verwendung:
My3Vector d; d = c;
-
Destructor: Deklaration
˜ My3Vector()
Wird implizit aufgerufen wenn Objekt gelöscht wird (out-of-scope geht).
Für bisherige Beispiele automatische Erzeugung ausreichend:
-
Copy constructor und
= Operator legen neues Objekt an und kopieren
die Member-Variablen (
double x, y, z bei My3Vector).
Für einfache Klassen ist das in der Regel ausreichend.
- Aber sobald dynamisch
Ressourcen angelegt werden müssen Copy constructor, = Operator und Destructor
implementiert werden um diese
Ressourcen korrekt zu verwalten.
Beispiele:
-
dynamic memory wird angelegt wird (z.B.
new double[100]) (klassisches C++ Beispiel)
dann eigene Implementierung obiger Methoden nötig
- Datei wird geöffnet für Lesen/Schreiben
- Netzwerkverbindung aufmachen
- Mit Datenbank-Service verbinden
- ...
-
Copy constructor: Sicherstellen dass neues Objekt unabhängig ist (deep copy, neue Netzwerkverbindung, ...)
-
destructor: Objekt wird gelöscht, sicherstellen dass
vorhandene Ressourcen aufgeräumt werden.
-
= operator: Kombination von destructor und copy constructor: Objekt existiert schon,
nicht einfach überschreiben sondern erstmal sicherstellen dass
vorhandene Ressourcen aufgeräumt werden (wie destructor), dann neues Objekt unbhängig erstellen (wie copy constructor)