439 Stimmen

Muss ich den virtuellen Basis-Destruktor explizit aufrufen?

Wenn ich eine Klasse in C++ überschreibe (mit einem virtuellen Destruktor), implementiere ich den Destruktor wieder als virtuell in der erbenden Klasse, aber muss ich den Destruktor der Basisklasse aufrufen?

Wenn ja, kann ich mir vorstellen, dass es ungefähr so aussieht...

MyChildClass::~MyChildClass() // virtual in header
{
    // Call to base destructor...
    this->MyBaseClass::~MyBaseClass();

    // Some destructing specific to MyChildClass
}

Habe ich Recht?

11voto

itsmatt Punkte 30839

Nein. Im Gegensatz zu anderen virtuellen Methoden, bei denen Sie die Basismethode explizit von der abgeleiteten Methode aus aufrufen, um den Aufruf zu "verketten", erzeugt der Compiler Code, um die Destruktoren in der umgekehrten Reihenfolge aufzurufen, in der ihre Konstruktoren aufgerufen wurden.

7voto

Benoît Punkte 16390

Nein. Sie wird automatisch aufgerufen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X