operator= überladen funktioniert nicht
-
hi,
hab probleme den zuweisungsoperator richtig überladen zu bekommen:
die eigentlichen Kopierkonstruktoren hab ich bereits hinbekommen und funktionieren nach meinem bisherigen testen auch.
Den Aufruf den ich machen will, der schaut so aus:
FIFOQueue * a = new FIFOQueue(); FIFOQueue * b = a;mein derzeitiger versuch dafür sieht so aus:
FIFOQueue * FIFOQueue::operator =(FIFOQueue * rhs) { if (!rhs->isEmpty()) { this->m_start = new Node(rhs->m_start->getVal()); this->m_iCount++; copyNode(rhs->m_start->getNext(), this->m_start->getNext(), this->m_start); } return this; }ich finde leider nur beispiele im internet die sich auf das kopieren für referenzen beziehn und nicht auf pointer. hab das versucht soweit es geht umzusetzen, aber es endet immer in einem runtime-error sobald ich die variable "b" benutzen möchte und methoden aufrufe.
-
Warum willst du den Zuweisungsoperator für Pointer überladen? Das ist eine ganz schlechte Idee.
-
Du kannst keinen Zuweisungsoperator für eingebaute Typen überladen. Zeiger sind eingebaute Typen, egal was für Zeiger.
-
das heist bei Pointer muss ich zum kopieren immer
A * b = new A(a);
verwenden und den Kopierkonstruktor explizit verwenden?
-
Das kannst Du machen (ist ja nichts anderes als ein Kopieren, nur auf dem Heap). Problematisch wird das ganze aber, wenn das Objekt a garnicht vom Typ A, sondern von einem davon abgeleiteten Typ ist. Wenn A jetzt noch nicht-abstrakt ist (was ansich schon kein guter Stil wäre), würdest Du Dir einen Ausschnitt des Objekts kopieren (slicing).
-
du kannst natürlich auch Makros verwenden