008
14.07.2006, 11:23 Uhr
RHBaum
|
Zitat: |
Gut, das hab ich soweit verstanden. Aber warum wird zum Beispiel wenn man Destruktoren virtual definiert der virtuelle selber auch aufgerufen dass is ja bei virtuellen Methoden nicht so.
|
In der Tat, Ziel bei polymorphen klassen bei Destruktor und Methoden iss kleinwenig anders.
Methode: einfach nur die eine "richtige" aufrufen.
Destruktor: beim "richtigen" destruktor beginnen und alle destruktoren aller beteiligten klassen bis zur basisklasse hinauf aufzurufen.
Um das "richtig" aber herauszubekommen, also um welche klasse der hirarchie es sich wirklich handelt, dazu braucht man die vtable, und damit virtual. Deswegen sollte bei als basis vorgesehene klassen der destruktor immer virtual sein. whaerend nicht virtuelle methoden auch an ner klasse mit vererbung durchaus sinn machen, sind nichtvirtuelle destruktoren das killerkriterium fuer polymorph behandelte klassen (falscher einsprungspunkt fuer destruktion, es bleiben fragmente der abgeleiteten klassen undestruktiert -> memory leaks und undefiniertes verhalten)
Warum der konstruktur nie virtual sein braucht / darf, das kannst dir nu sicher selbst beantworten ^^
Ciao ... |