Lassen Sie uns sagen, dass wir Codes wie folgen:Anruf overrided Methoden der Nachkommen von virtuellen Destruktor der Basisklasse
class Base{
public:
virtual ~Base(){PutStat();};
virtual void PutStat(){/* maybe do nothing */};
};
class Desend : public Base{
public:
void PutStat() override{/* do something */};
};
Methode PutStat eine Statistik gedruckt werden. Ich hoffe, dass jede Instanz von Descendants, die von Base geerbt wurde, beim Zerstören automatisch eine Statistiknachricht drucken konnte.
Es scheint eine allgemeine Eigenschaft hier zu sein, stat-message auszugeben, daher ist es vernünftiger, PutStat nur einmal in Base aufzurufen, als PutStat in jedem einzelnen Nachkommen aufzurufen.
Leider ist als Destruktor in Base virtual, also nicht übergelaufen PutSat aufgerufen werden.
So, wie die überarbeitete Version von PutStat in Base-Destruktor aufgerufen wird.
Sie können nicht. Der Destruktor für die abgeleitete Klasse wurde bereits ausgeführt, daher gibt es nichts Sinnvolles, das eine Memberfunktion der abgeleiteten Klasse tun kann. –
Sie können nicht. An dem Punkt, an dem der Basisklassen-Destruktor aufgerufen wird, existiert das abgeleitete Objekt nicht mehr und Sie rufen die Basisklassenversion von PutStat auf. – MikeMB
Und Ihr Destruktor ist nicht virtuell. – MikeMB