Wann sollte man virtuelle Destruktoren in C++ verwenden und was passiert, wenn man sie nicht deklariert?
Hallo zusammen! Ich habe gerade angefangen, C++ zu lernen und verstehe eine Sache nicht. Schaut mal:\n\nIch habe eine Basisklasse `Base` und eine abgeleitete Klasse `Derived`. In `Derived` allokiere ich Speicher auf dem Heap. Wenn ich ein Objekt über einen Zeiger auf die Basisklasse erstelle und es dann mit `delete` lösche, wird nur der Destruktor von `Base` aufgerufen, der Destruktor von `Derived` jedoch nicht. Dies führt zu einem memory leak, weil der im abgeleiteten Objekt allokierte Speicher nicht freigegeben wird.\n\nIch weiß, dass man `virtual` vor den Destruktor in der Basisklasse setzen muss, und dann funktioniert alles. Aber warum passiert das? Ich habe doch explizit Code geschrieben, der den Destruktor des abgeleiteten Objekts aufrufen sollte? Oder verwechsle ich etwas?\n\nHier ist ein Beispielcode, der bei mir nicht funktioniert (bzw. funktioniert, aber mit memory leak):\n\n```cpp\nclass Base {\npublic:\n ~Base() { std::cout