Braucht jede Klasse einen Destructer?
-
Torsten Robitzki schrieb:
In Deinem Fall wird ein Destruktor aufgerufen, weil Du ein Objekt kopierst (getServer()). [...]
Nope. Da wird dank RVO nix kopiert.
-
hustbaer schrieb:
Redthoobe schrieb:
Meine Frage: Braucht eigentlich jede Klasse einen Destructer? Ich rufe einige funktionen auf und als ich damals noch einen destructer hatte wure er auch mit aufgerufen was ich nicht mochte.
Wisst ihr wie ich das verhindere das der Destructer mit aufgerufen wird?Jede Klasse hat automatisch einen Destruktor. Wenn du keinen schreibst, dann erzeugt der Compiler einen für dich.
Aber nur, wenn er auch gebraucht wird, um mal wieder zu den Spitzfindigkeiten zurück zu kehren
.
-
Swordfish schrieb:
Torsten Robitzki schrieb:
In Deinem Fall wird ein Destruktor aufgerufen, weil Du ein Objekt kopierst (getServer()). [...]
Nope. Da wird dank RVO nix kopiert.
Und war der Hinweis auf eine möglicherweise vom Compiler, optional durchgeführte Optimierung jetzt hilfreich für den OP?

-
Der Punkt ist, daß wegen der (Nicht-)Kopie nix zerstört wird, aber am ende der
main()totsicher.
-
Swordfish schrieb:
totsicher
SeppJ schrieb:
zurück zu kehren
Bitte etwas auf Rechtschreibung achten!
-
Torsten Robitzki schrieb:
Und war der Hinweis auf eine möglicherweise vom Compiler, optional durchgeführte Optimierung jetzt hilfreich für den OP?

Wie ich anfangs schon erwähnt habe. Dieser Thread ist in eine Katastrophe ausgeartet mit jeder Menge (teilweise sogar auch falschen) Informatioen, die für den Fragesteller zum jetztigen Zeitpunkt (die Frage lässt auf einen Einsteiger schließen) absolut unnötiger Ballast sind. Das kommt einem hier ein wenig so vor also ob sich hier die ganzen Experten wie die Geier auf eine Anfängerfrage stürzen und alle zeigen wollen dass sie den längsten ...
(... Absatz aus dem C++Standard auswendig aufsagen können)herb Sutter hat das mal (wenn auch in einem anderen Kontext) schön auf den Punkt gebracht:
"It's hard toberemember that you are an expert."Es reicht erstmal wirklich aus zu wissen, dass man keinen Destruktor schreiben muss und dass das dann dasselbe ist als hätte man einen Destruktor mit leerem Funktionskörper geschrieben (tu (quasi) nix!).
Finnegan
-
SeppJ schrieb:
hustbaer schrieb:
Redthoobe schrieb:
Meine Frage: Braucht eigentlich jede Klasse einen Destructer? Ich rufe einige funktionen auf und als ich damals noch einen destructer hatte wure er auch mit aufgerufen was ich nicht mochte.
Wisst ihr wie ich das verhindere das der Destructer mit aufgerufen wird?Jede Klasse hat automatisch einen Destruktor. Wenn du keinen schreibst, dann erzeugt der Compiler einen für dich.
Aber nur, wenn er auch gebraucht wird, um mal wieder zu den Spitzfindigkeiten zurück zu kehren
.Hmmmmmmm *nachdenk*.
OK, Mist!Also du meinst Klassen deren Dtor weder userdefiniert ist, noch irgendwo benötigt wird. OK, ja, die haben dann keinen. Und sie müssen nichtmal einen haben können wenn ich genauer drüber nachdenke. Sie könnten ja ne Basisklasse mit nem privaten Dtor haben -- dann würde der Compiler beim Versuch den impliziten Dtor zu generieren Zahnräder spucken.
Oder hast du was anderes gemeint?
-
hustbaer schrieb:
Also du meinst Klassen deren Dtor weder userdefiniert ist, noch irgendwo benötigt wird. OK, ja, die haben dann keinen. Und sie müssen nichtmal einen haben können wenn ich genauer drüber nachdenke. Sie könnten ja ne Basisklasse mit nem privaten Dtor haben -- dann würde der Compiler beim Versuch den impliziten Dtor zu generieren Zahnräder spucken.
Oder hast du was anderes gemeint?
Genau die 2 Fälle meinte ich. Und noch den 2.5ten Fall, dass man den Destruktor explizit deleted.
-
Ach... scheiss drauf. Wenn der Thread eh schon im Arsch is
...SeppJ schrieb:
Und noch den 2.5ten Fall, dass man den Destruktor explizit deleted.
... mach ich eigentlich immer so, seitdem hab ich kein Problem mehr mit Dangling Pointers! :p
struct Dindong { ~Dindong () = delete; }... habe sogar einen Smart Pointer dafür geschrieben,
immortal_ptr, der in seinem Destruktor explizit keindeletemacht, ist sicherer so, weil man es sonst vergisst und eventuell den Pointer deleted.
Es gibt sogar eine Utility-Funktionmake_immortal, die den Pointer auch dann nicht deleted, wenn eine Exception geworfen wird... sicher ist sicher
Finnegan
-
Finnegan schrieb:
SeppJ schrieb:
Und noch den 2.5ten Fall, dass man den Destruktor explizit deleted.
... mach ich eigentlich immer so, seitdem hab ich kein Problem mehr mit Dangling Pointers! :p
struct Dindong { ~Dindong () = delete; }Ich steh gerade auf dem Schlauch, in welchem Anwendungsfall sollte man einen DTOR deleten wollen?
-
Wüsste ich auch nicht, es sei denn man deleted den Default-Ctor gleich mit. Der Unterschied zu nem Namespace wäre dann immerhin noch dass man die Klasse z.B. als "Funktionssammlung" an ein Template übergeben könnte.
Dass das ein Scherz von Finnegan war ist die aber klar, oder?
-
hustbaer schrieb:
Dass das ein Scherz von Finnegan war ist die aber klar, oder?
Hmpf, es sieht so aus als ob mein Ironie/Sarkasmus/Bullshit Detektor Anfragen erst ab 13.00 Uhr bearbeitet und auch nur dann, wenn der Koffeinspiegel ein akzeptables Niveau erreicht hat.
Also Danke für den Hinweis.
