Aus Neugier habe ich versucht, etwas wie das folgende Beispiel zu machen, um zu sehen, ob der Compiler mich warnt oder nicht, anstatt eine Endlosschleife aufzurufen, die in einem Stapelüberlauf endet. Ich dachte, vielleicht gibt es ein anderes Verhalten als nur normale Funktionen oder Methoden aufzurufen. Aber das ist nicht der Fall. Gibt es eine spezielle Erklärung dafür oder wird es nur als normale Funktionsaufrufe behandelt, da ich den Basisklassen-Destruktor explizit mit dem Operator this
aufruft?Wie behandelt der Compiler im abgeleiteten Destruktor Basisklassen-Destruktoraufrufe?
Beispiel:
class A {
virtual ~A();
};
class B : A {
virtual ~B() { this->~A(); }
};
'virtual void ~ A();' - Dies sollte nicht kompilieren, Destruktoren geben nichts zurück, und normale Methodenname kann nicht enthalten Tilda. – yeputons
@yeputons Recht, sry, war ein Tippfehler –
Es wird undefiniertes Verhalten durch zweimaliges Aufrufen von '~ A()' (da gibt es einen impliziten Aufruf einmal '~ B()' s Körper beendet) –