DTor-Fehler
-
Jockelx schrieb:
Was meinst du mit 'syntaktischer Käse'?
Ganz einfach: ~Fremd() ist syntaktisch falsch. Kein C++. Zumindest solange für Fremd kein unärer operator~ überladen wurde.
Sollte dies der Fall sein, dann ist die Zeile wiederum sehr fragwürdig, da der ~-Operator auf ein temporäres Objekt angewendet werden würde. Und da der Autor ja ein guter Programmierer ist wollen wir nicht annehmen, dass er da irgendwelche gloablen Seiteneffekte anstoßen möchte.Wenn ich die Zeile mit 'Verantwortlich für Fehler' auskommentiere,
lässt es sich ja kompilierenNatürlich. Mal davon abgesehen, dass im geposteten Code der Op= private ist. Aber das wird wohl nur eine Eigenschaft des geposteteten Codes sein.
Der Autor ist leider im Urlaub, ist aber ein ziemlich guter Programmierer.
Das mag ja sein, ändert aber nichts an den Tatsachen.
~Fremd() geht nur, falls ein unärer Operator~ überladen wurde. Ist dann aber blödsinn. this->~Fred(); geht zwar (zerstört das aktuelle Objekt) und kann zusammen mit placement-new auch in einem op= angewendet werden, das Ganze ist aber ein absolutes Anti-Idiom und einem guten Programmierer nicht würdig.
-
Hi,
'~' wurde überladen, der Inhalt war aber nicht wichtig und ich
hab's weggelassen.Gut, dann verlass ich mich jetzt mal auf dich und nutze seine Klasse
erstmal nicht (auch wenn ich Sie dringend bräuchte).
Hoffe nur, dass ich keinen Anschiss bekomme wenn er wieder kommt,
weil ich zu blöd war seine Klasse zu nutzen.
Aber dann könnte ich ihm wenigstens diesen Thread zeigen und beweisen, dass
das niemand versteht.P.S.: Falls das wiedererwartend doch einen Sinn haben sollte, werde ich's
dir natürlich mitteilen.Danke für die Hilfe.
Jockel
-
Jockelx schrieb:
'~' wurde überladen, der Inhalt war aber nicht wichtig und ich
hab's weggelassen.Das sieht dein Compiler anscheinend anders. Poste doch bitte mal die Signatur der Überladung.
Aber dann könnte ich ihm wenigstens diesen Thread zeigen und beweisen, dass das niemand versteht.
Dein Compiler versteht die Klasse nicht. Das ist so ein Punkt, den du nicht unbedingt vergessen solltest. Wir hier im Forum können die Klasse nicht verstehen, da du alle interessanten Details entfernt hast.
-
Ganz normal überschrieben.
Ich glaube nicht, alle interessanten Details verschwiegen zu haben.public: ~Fremd();
-
Jockelx schrieb:
Ganz normal überschrieben.
Ich glaube nicht, alle interessanten Details verschwiegen zu haben.public: ~Fremd();Wo siehst du hier die Überladung eines unären Operator~? Du präsentierst hier nur eine Destruktor-Deklartion. Das ist zwar auch schön, aber natürlich was völlig anderes.
-
Jetzt war ich durcheinander.
Also der '~'-Operator wurde nicht überschrieben, trotzdem ist
ein ~Fremd() Aufruf doch scheinbar nicht syntaktisch Falsch,
da es ja sonst auch ohne '=' -Aufruf zu einem Fehler kommen müsste.Jockel
-
Jockelx schrieb:
Jetzt war ich durcheinander.
Also der '~'-Operator wurde nicht überschriebenDas hatte ich mir gedacht.
trotzdem istein ~Fremd() Aufruf doch scheinbar nicht syntaktisch Falsch,
Der Aufruf von ~Fremd() ist in diesem Fall syntaktisch Falsch. Nicht nur scheinbar sondern schlicht und einfach.
da es ja sonst auch ohne '=' -Aufruf zu einem Fehler kommen müsste.
Nein.Es handelt sich hier um ein Template und ~Fremd() ist ein abhängiger Name. Demzufolge wird der op= erst vollständig geprüft, wenn diese Funktion instanzziert wird. Das passiert aber erst, wenn du a) die Klasse instanziierst und du b) den op= aufrufst.
Deswegen ja auch mein Kommentar im ersten Beitrag
Dem Autor von Fremd solltest du dringend zu seiner hervorragenden Testleistung gratulieren. Nichtmal das Template instanziiert. Hut ab!
Der Autor hat sich offensichtlich nicht die Mühe gemacht seine Klasse zu testen. Er hat niemals den op= instanziiert.
-
HumeSikkins schrieb:
Nein.Es handelt sich hier um ein Template und ~Fremd() ist ein abhängiger Name. Demzufolge wird der op= erst vollständig geprüft, wenn diese Funktion instanzziert wird. Das passiert aber erst, wenn du a) die Klasse instanziierst und du b) den op= aufrufst.
Deswegen ja auch mein Kommentar im ersten Beitrag
Ja, sorry, das hab ich nicht gewusst und bei deinem Kommentar
offensichtlich falsch verstanden.Danke nochmals für die Mühe.
Jockel
-
Der Autor ist leider im Urlaub, ist aber ein ziemlich guter Programmierer.
Ja ne is klar...
-
Leute, die aus einem so minimalem Codestückchen aus einem riesigem Projekt,
Rückschlüsse auf die Qualifikation des Programmierers glauben
ziehen zu können, disqualifizieren sich schon von vorneherein.
-
Jockelx schrieb:
Leute, die aus einem so minimalem Codestückchen aus einem riesigem Projekt,
Rückschlüsse auf die Qualifikation des Programmierers glauben
ziehen zu können, disqualifizieren sich schon von vorneherein.Dir ist klar, dass du genau das was du kritisierst, wenn auch nicht auf Code, sondern auf Aussagen bezogen, soeben selbst gemacht hast, oder ?