C
Sepp Brannigan schrieb:
camper schrieb:
Sepp Brannigan schrieb:
camper schrieb:
an dem code ist eine menge falsch - diese begründung hier allerdings ebenfalls zu 100%.
stimm ich dir doch glatt zu: Hier ist ne Menge faul. Allerdings würd mich interessieren, was an meiner Begründung so 100%ig falsch sein soll?
Nur mal angenommen, es gibt sonst keine Fehler allerdings auch keinen operator=() - was passiert deiner Meinung nach beim Verlassen der Methode?
op= wird in verein() nie aufgerufen (der copy-ctor dagegen wenigstens einmal). abgesehen davon, solange der destruktor eben nicht richtig funktioniert, spielt es schlicht keine rolle, ob ein selbstdefinierter operator vorhanden ist - der implizit benutzte op= könnte durchaus 'korrekt' funktionieren. insofern ist die begründung mittels op= falsch.
Ich schrieb: beim Verlassen der Methode - also beim return (noch genauer: vor dem Lauf des Destructors) und da wird der operator=() wohl aufgerufen [M3 = M1.verein(M2);].
oh ja, stimmt - da hab ich gar nicht hingeschaut. macht aber nichts - eine flache kopie reicht völlig aus, da die knoten liste selbst ja intakt bleibt (solange der destruktor nicht funktinierte - klar).
Daher spielt dieser durchaus eine Rolle - die, wenn nicht beachtet, _definitiv_ zu Problemen führt und zwar mit oder ohne funktionierendem Destructor. Ausserdem wage ich zu behaupten: "... könnte der implizit benutzte op= durchaus 'korrekt' funktionieren" ist hier wohl das, was sicherlich _nicht_ richtig ist - der implizite op=() erstellt dir eine flache kopie - was nicht ausreicht - soviel dürfte klar sein.
Darüberhinaus hab ich nie behauptet, alle Fehler zu listen. Die Frage war, "woran kann das liegen?" - und das ist IMHO eine der Möglichkeiten.
Also nochmal: Wenn ich wirklich falsch liege, dann bitte gib mir ne plausible Erklärung (das eben war keine) - immerhin behauptest du hier, dass ich bullshit erzähle ...
grüße
wie gesagt, der implizite op= reichte durchaus aus (er führt nur dazu, dass die kopie sich die knotenliste mit dem original teilt - und das führt möglicherweise zu problemen, sobald eine der listen verändert wird. dass der destruktor die anker pFirst,pLast löschte, spielt keine rolle. der wird schliesslich erst nach erstellen der kopie per copy-ctor bzw. copy-op ausgeführt (wir machen ja keine kopien von toten objekten). nat. brauchen wir einen eigenen op= wenn die liste jemals richtig funktionieren soll.
abgesehen davon, spät in der nacht lässt die hirnaktivität nach - es war keineswegs ein angriff auf dich.