Question

Si nous écrivons une fonction virtuelle, elle ajoute une vtable dans un objet de cette classe. Est-ce vrai aussi pour le destructeur virtuel? Est-ce que vtable est utilisé pour implémenter le caractère virtuel du destructeur

Était-ce utile?

La solution

Oui. Certaines informations sont nécessaires pour autoriser le destructeur approprié à ê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 importe peu (bien que la liaison dynamique implique probablement que c'est un pointeur). Naturellement, ces informations doivent être adjacentes à (à l'intérieur) de l'objet pointé.

L'ajout d'une méthode virtuelle, y compris un destructeur, à une classe qui n'en avait aucune auparavant augmentera sizeof (classe).

Autres conseils

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 une fonction virtuelle possède une table de pointeurs de fonctions (virtuels), le destructeur étant l’un d’eux, s’il est marqué comme virtuel.

Oui c'est ça. Désolé, je n'ai pas de référence définitive pour étayer mon affirmation. Mais comment auriez-vous un comportement différent en utilisant simplement un pointeur sur l'objet?

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

Elle est traitée comme toute autre fonction normale et sera ajoutée à la vtable.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top