Destruktor und delete - Unterschied
-
Nur so am Rande: Einen Destruktor ruft man in 99,999% der Fälle niemals explizit auf.
Hast Du ein Beispiel, oder einen Verweis auf ein Beispiel, wo es Sinn macht, den Destruktor explizit aufzurufen?
Danke nochmal für die schnellen Antworten!! Ich hab es jetzt verstanden

-
Tannenbaum_C++ schrieb:
Hast Du ein Beispiel, oder einen Verweis auf ein Beispiel, wo es Sinn macht, den Destruktor explizit aufzurufen?
Vergiss diesen Fall einfach. Ich behaupte das du diesen Sonderfall (eigenes Speichermanagement) niemals benötigst. Ich bin seit etwa 15 Jahren beruflich mit C++ unterwegs, in keiner Anwendung gab es einen solchen Fall.
-
Tannenbaum_C++ schrieb:
Hast Du ein Beispiel, oder einen Verweis auf ein Beispiel, wo es Sinn macht, den Destruktor explizit aufzurufen?
Stichwort: placement new
-
Biolunar schrieb:
Tannenbaum_C++ schrieb:
Hast Du ein Beispiel, oder einen Verweis auf ein Beispiel, wo es Sinn macht, den Destruktor explizit aufzurufen?
Stichwort: placement new
Dafür gibt es Placement delete?
Ich meine mich erinnern zu können, dass im Alexandrescu ein Singleton-Fall beschrieben wurde, wobei die Singleton Instanz auch immer mal wieder zerstört werden kann (er nannte das das Phönix Singleton) und dabei wurde ein manueller Destruktoraufruf gebraucht, aber ich bin mir auch nicht sicher. Kann auch wo adners gewesen sein....
-
Skym0sh0 schrieb:
Dafür gibt es Placement delete?
Es gibt kein placement delete.
-
LordJaxom schrieb:
Skym0sh0 schrieb:
Dafür gibt es Placement delete?
Es gibt kein placement delete.
Oh shit, das äh wusste ich nicht -.-'
Habs auch noch nie gebraucht im Produktionsbetrieb
-
LordJaxom schrieb:
Skym0sh0 schrieb:
Dafür gibt es Placement delete?
Es gibt kein placement delete.
Doch, technisch gesehen schon.
Wenn der Konstruktor beim placement new eine Exception wirft, wird placement delete aufgerufen. Für die Version, die einfach nur einen Speicherbereich bekommt und darin den Konstruktor aufruft, ist das no-op, aber man kann ja die placement new Syntax mit beliebigen Argument machen, dann werden sie auch an die entsprechende placement delete Funktion übergeben, die dann evtl. Arbeit macht.
Aber "reines" ploacement delete, im Gegenzug zu placement new gibt es nicht, ja.
-
Nathan schrieb:
Wenn der Konstruktor beim placement new eine Exception wirft, wird placement delete aufgerufen.
Wenn der Konstruktor eine Exception wirft, gilt das Objekt doch als nicht erzeugt und es wird lediglich der Speicher freigegeben? Meinst Du operator delete?
-
LordJaxom schrieb:
Nathan schrieb:
Wenn der Konstruktor beim placement new eine Exception wirft, wird placement delete aufgerufen.
Wenn der Konstruktor eine Exception wirft, gilt das Objekt doch als nicht erzeugt und es wird lediglich der Speicher freigegeben? Meinst Du operator delete?
Richtig und due Speicherfreigabe macht operator plscement delete.
-
Für die Korinthenkacker (also mich): Der Standard kennt ein placement new, aber kein placement delete. Er kennt aber wohl einen placement operator delete.