Wenn ich% destructor Parent
virtuell mache, erhalte ich einen Fehler, also was ist der Zweck, einen geschützten Destruktor virtuell zu machen?
Um nur ein Beispiel zu nennen: Nehmen wir an, Sie haben eine Basisklasse, die die Referenzzählung implementiert. Sie haben eine addRef
und eine release
Methode und möchten, dass Ihr Objekt zerstört wird, wenn (und nur if) der interne Zähler Null erreicht durch einen Aufruf von release
.
Also, zuerst wollen Sie Ihren Destruktor geschützt (da Sie nur das Objekt aus relase
zerstören wollen).
Wenn Sie beabsichtigen, von Ihrer Klasse abzuleiten, möchten Sie auch, dass Ihr Destruktor virtuell ist, da Sie einen virtuellen Destruktor immer dann brauchen, wenn Sie ein untergeordnetes Objekt durch einen Zeiger auf eine Basisklasse zerstören wollen (danke @sharptooth für den Hinweis). ..)
Ja, wenn Sie delete this
in class Parent
member-Funktionen ausführen möchten, was sehr häufig bei der Implementierung von IUnknown::Release()
in COM-Objekten ist.
Tags und Links c++ inheritance protected virtual-destructor