Destruktor wird nicht aufgerufen
-
Hallo,
kann mir einer erklären, wieso hier der Destruktor nicht automatisch aufgerufen wird?
#include <iostream> using namespace std; class Beispiel { public: int nr; Beispiel(int nummer) { nr = nummer; cout << "Pos. A, "; cout << "Nr.: " << nr << endl; } ~Beispiel() { //Destruktor cout << "Pos. B, "; cout << "Nr.: " << nr << endl; } }; int main() { cout << "Pos. D" << endl; Beispiel * bp = new Beispiel(5); cout << "Pos. E" << endl; //bp->~Beispiel(); }Muss ich dann den wie unten auskommentiert selbst aufrufen?
Danke schon mal.
-
Du hast das Objekt mit new erzeugt und musst es mit delete wieder freigeben.
delete bp;- osdt
-
Danke, das bringt mich auf Heap und Stack

-
markus80 schrieb:
Danke, das bringt mich auf Heap und Stack

Und wie du siehst, wird der Destruktor automatisch aufgerufen, wenn du
Beispiel b(5);geschrieben hättest. Nicht nur deswegen sollte dies die bevorzugte Art sein, seine Objekte zu halten. Diese automatischen Destruktoren werden richtig mächtig, wenn man denn doch mal new braucht, da man dann im Konstruktor eines Objekts das new machen kann und wenn man im Destruktor das zugehörige delete hat, dann wird dies ganz automatisch aufgerufen! so machen das die ganzen Container der Standardbibliothek (vector & Co.) und du solltest es auch machen (sofern dir die Standardbibliothek nicht reicht). Stichworte: RAII, Smartpointer, Dreierregel.