override in derived dtor



  • Hey Leute,

    ich bin eben auf etwas abstruses gestoßen und bin mir nicht sicher warum das so funktioniert....

    #include <iostream>
    using namespace std;
    
    struct A {
    	A(){};
    	virtual ~A() { std::cout << "bar"; };
    };
    
    struct B : public A {
    	virtual ~B() override { std::cout << "foo"; };
    };
    
    int main() {
    	// your code goes here
    	B();
    	return 0;
    }
    

    Also meine überlegung ist das "virtual ~B() override" nicht funktionieren dürfte, da es ja nichts überschreibt. was man auch sieht wenn man den snippet ausführt. Warum meckert der compiler dann nicht beim kompilieren?

    Hat einer dazu eine Quelle? Also warum der compiler nicht bei einem override meckert wo er nicht überschrieben kann/darf/tut.



  • Naja, es überschreibt ja den Destruktor von A. Nur dass dieser dann, weil es ein Destruktor ist, trotzdem ausgeführt wird.

    Das override bringt dir hier aber was anderes: solltest du vergessen haben, A::~A() virtual zu machen, gibt es einen Compile-Fehler. Das override ist also auch hier sinnvoll.

    In C++11 ist das in 10.3.6 geregelt, wenn ich das gerade richtig gefunden habe:

    Even though destructors are not inherited, a destructor in a derived class overrides a base class destructor declared virtual; see 12.4 and 12.5.


Log in to reply