2009-09-17 4 views

Répondre

4

Oui. Certaines informations sont nécessaires pour permettre au destructeur droit d'être appelé lorsque l'objet est supprimé via un pointeur de classe de base. Que cette information soit un petit index entier ou un pointeur n'a pas d'importance (bien que le lien dynamique implique probablement qu'il s'agit d'un pointeur). Naturellement, cette information doit être adjacente à (à l'intérieur) de l'objet pointé. Ajouter une méthode virtuelle de n'importe quel type, y compris un destructeur, à une classe qui n'en avait pas auparavant, augmentera sizeof (class).

2

Oui c'est. Désolé, je n'ai pas de référence définitive pour sauvegarder mon affirmation. Mais sinon comment auriez-vous un comportement différent lorsque vous utilisez juste un pointeur sur l'objet?

+0

Il existe d'autres mécanismes pour mettre en œuvre des méthodes virtuelles. Les vtables sont juste les plus communs (et faciles à implémenter). –

4

Je ne crois pas que la norme C++ nécessite un mécanisme particulier pour produire le comportement correct, mais oui, c'est une implémentation typique. Une classe avec au moins 1 fonction virtuelle a une table de pointeurs de fonction (virtuelle), le destructeur étant l'un d'eux, s'il est marqué virtuel.

2

Oui. Le destructeur virtuel est comme n'importe quelle autre méthode virtuelle. L'entrée Vtable sera ajoutée.

0

Il est traité comme n'importe quelle autre fonction normale et sera ajouté au vtable.

Questions connexes