C++: Virtuelle Destruktoren

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

C++: Virtuelle Destruktoren
Hi,

ich hatte eine ganze Weile folgende Warnung:

device/keyboard.h:21: warning: `class Keyboard' has virtual functions but 
   non-virtual destructor

. Jetzt habe ich mal einen leeren virtuellen Destruktor eingefuegt und es hat tatsaechlich das Verhalten (in dem Fall von OOStuBS) veraendert. Ich verstehe aber nicht, warum. Ich lege nur ein globales Objekt keyboard an und das stirbt dementsprechend auch nie - warum veraendert dann ein Destruktor das Verhalten?

Und warum warnt der GCC generell davor, virtuelle Funktionen ohne entsprechenden Destruktor zu verwenden? Es gibt doch sicher Faelle, wo das nicht noetig ist, oder?

Vielen Dank fuer ein paar Anmerkungen,
-Steppenwolf


Der Compiler will dich nur darauf aufmerksam machen, dass, falls du ein Objekt erzeugst das einer Klasse angehöhrt die von Keyboard abgelitten ist ein Speicherleck auftreten könnte (der Destruktor von Keyboard würde beim zerstören des abgelittenen Objekts nämlich nicht aufgerufen weil er nicht virtuell ist).