virtuelle Destruktoren

Für den Fall, daß man einen Array von Zeigern auf Objekte oder eine Liste von Klasseinobjekten einer Klasse und ihrer abgeleiteten Klassen erzeugt, kann es bei der Destruktion der Objekte zu Problemen kommen, da nicht der richtige Destruktor aufgrufen wird:
  class family { family(); ~family() { cout << "~family";} };
  class daughter : family { daughter(); ~daughter(){ cout << "~daughter;} };
  class son : family { son(); ~son() { cout << "~son";} };
  
  family* fam[10];  // Array aus 10 fam-Zeigern
  fam[1] = new family;
  fam[2] = new son;
  fam[3] = new daughter;

  delete fam[1];  // Ausgabe : ~family
  delete fam[2];  // Ausgabe : ~family !!
  delete fam[3];  // Ausgabe : ~family !!
Es wird also nicht der "richtige" Destruktor aufgerufen, da es sich um einen family Array handelt. Dieses Problem umgeht man, in dem die Destruktoren virtuell gemacht verden. Hier genügt es den Destruktor der Basisklasse als virtual zu deklarieren. Die Destruktoren der abgeleiteten Klassen sind dann automatisch virtuell .
  class family { family(); ~family() { cout << "~family";} };

  delete fam[1];  // Ausgabe : ~family
  delete fam[2];  // Ausgabe : ~daughter 
  delete fam[3];  // Ausgabe : ~son