Ein ähnliches Problem tritt bei der Zuweisung von Objekten auf:
CVector v,w; v=w;
Was erwarten wir? dass richtig kopiert wird. Der Compiler kopiert aber wieder nur die Membervariablen (also vector und dimension) und der allokierte Speicherplatz von v, der im Konstruktor allokiert wurde, geht ``verloren'', und beide Vektoren haben plötzlich Zeiger auf das gleiche Feld!
Wir stellen dem Compiler also einen Zuweisungsoperator als Memberfunktion zur Verfügung, damit er bei der Zuweisung korrekt arbeiten kann.
Deklaration:
class CVector { ... CVector& operator=( // assignment-operator const CVector& v ); ... };
Implementierung (vorläufig!):
CVector& CVector::operator=( const CVector& v ) { #ifdef _DEBUG if(dimension!=v.dimension) { cout << "fatal error: dimensions of vectors differ\n"; exit(1); } #endif dimension = v.dimension; vector = new double[dimension]; for(int i=0; i<dimension; i++) vector[i] = v.vector[i]; return ????; }
Problem: was geben wir zurück? Wir müssten eigentlich gerade das Objekt zurückgeben, mit dem wir arbeiten ...