Wenn ich versuche, das abgeleitete Objekt polymorph zu löschen (das heißt: Basisklasse public virtual destructor hat) immer noch, warum derived Klasse Privat destructor ist genannt zu werden? Warum funktioniert die Bereichsauflösung privat hier nicht.Privat Abgeleitet Destructor
class Base
{
protected:
Base() { cout << "Base constructor.\n"; }
public:
virtual ~Base() { cout << "Base destructor.\n"; }
};
class Derived :public Base
{
public:
Derived() { cout << "Derived constructor.\n"; }
private:
~Derived() { cout << "Derived destructor.\n"; }
};
int main()
{
Base *p = new Derived();
delete p;
}
Ausgang:
Base constructor.
Derived constructor.
Derived destructor.
Base destructor.
Weil Sie abgeleiteten dtor durch Basisklassenzeiger aufrufen ... –