Frage

Wenn wir virtuelle Funktion schreiben fügt es eine VTable in Objekt dieser Klasse. Auch ist es für virtuellen destructor wahr? Ist Vtable verwendet virtualness von destructor umzusetzen

War es hilfreich?

Lösung

Ja. Einige Informationen werden benötigt, um der richtige destructor, damit aufgerufen werden, wenn das Objekt über einen Basisklassenzeiger gelöscht. Ob diese Informationen ist ein kleiner Integer-Index oder ein Zeiger spielt keine Rolle (obwohl dynamische Verknüpfung wahrscheinlich bedeutet, dass es ein Zeiger). Natürlich muss diese Informationen neben (innen) der spitze-zu-Objekt sein.

eine virtuelle Methode jeglicher Art Hinzufügen, einschließlich einer destructor, zu einer Klasse, die vorher keine hatte, erhöht sizeof (Klasse).

Andere Tipps

Ich glaube nicht, dass der C ++ Standard für die Herstellung des richtigen Verhaltens einen bestimmten Mechanismus erfordert, aber ja, das ist eine typische Implementierung. Eine Klasse mit mindestens 1 virtueller Funktion hat eine Tabelle von (virtuellen) Funktionszeiger, die destructor ist einer von ihnen, wenn sie virtuell markiert wird.

Ja, es ist. Leider habe ich nicht eine endgültige Referenz meine Behauptung zu untermauern. Aber wie sonst sollte man ein anderes Verhalten erhalten, wenn nur ein Zeiger auf das Objekt mit?

Ja. Virtuelle destructor ist wie jede andere virtuelle Methode. Vtable Eintrag wird noch hinzukommen.

Es ist wie jede andere normale Funktion behandelt und in der V-Tabelle hinzugefügt werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top