Probleme mit dem Desktruktor eine Klasse
-
Hallo,
ich programmiere noch nicht lange C++ und habe ein Problem mit dem Desktruktor einer Klasse. Wenn ich einen überladenen Operator aufrufe, bekomme ich nicht den erwünschten Wert zurück, sondern meinen Eingabe wert. Und der Eigentlich aufgerufene Wert wird nach vor dem return entfernt.
Das Code fragment um das es geht.
Vektor2D::~Vektor2D(){ }; Vektor2D& Vektor2D::operator*(float lamda){ for (int i=0; i < mZeilen; i++) { mElement[i] *= lamda; } return *this; }; Vektor2D& Vektor2D::operator+(Vektor2D v){ for (int i=0; i < mZeilen; i++) { mElement[i] += v.mElement[i]; }; return *this; }; Vektor2D& Vektor2D::operator-(Vektor2D v){ for (int i=0; i < mZeilen; i++) { mElement[i] -= v.mElement[i]; }; return *this; };Gibt es eine möglichkeit den Desktruktor zu umgehen? Oder kann man das so schreibe, das es trotzdem funktioniert.
Gruß,
Beasttear
-
Das hat nichts mit dem Destruktor zu tun. Wie rufst du das auf? Normal würde man bei so einem Operator erwarten, dass ein neues Objekt erstellt wird, und nicht dass das eigentliche Objekt verändert wird.
DAs ist jetzt auch nicht C++/CLI, sonst stellen die Leute immer ihre C++/CLI Fragen ins C++ Forum ^^
-
stimmt, du hast recht, hab das falsche Froum gewählt. Entschuldigt bitte.
Okay, dann stellt sich mir aber eine andere Frage, wie kann ich das dann immutable machen? Weil ich möchte eine Zeiger auf das neue Objekt dann zurückgeben und nicht eine Kopie.
@Admin/Moderator: Bitte verschieben
-
Doch, bei sowas gibt man tatsächlich Kopien zurück. Es gibt hier auch solche Ansätze wie Expression Templates oder du kannst natürlich auch intern einen copy on write Mechanismus implementieren und die Daten nur einmal vorhalten, solange du sie nur einmal brauchst. Ist hier aber nicht der Fall, da du tatsächlich zwei unterschiedliche Vektoren hast.
-
Dieser Thread wurde von Moderator/in Jochen Kalmbach aus dem Forum C++/CLI mit .NET in das Forum C++ (auch C++0x und C++11) verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.