2011-06-23 3 views

Répondre

11

Il n'a aucun type. C'est un détail d'implémentation non spécifié par la norme; il ne fait pas partie de la langue. Notez que C++ ne dit pas qu'il doit y avoir une table virtuelle ou un "pointeur" virtuel du tout (bien que ce soit l'implémentation la plus courante de RTTI dans les chaînes d'outils C++).

De plus, votre analyse est erronée. Dans, disons, GCC, habituellement chaque objet obtient un vptr qui pointe vers la table virtuelle pertinente pour le type de cet objet: l'objet a un pointeur, le type a une table.

+0

Oooh, votre réponse est pas drôle :( – Blindy

+0

@Blindy:.. Au moins, il est pas tout à fait induire en erreur –

+0

Salut Selon mon vtable compréhension est formé au niveau de la classe Comme vous dites que «Dans GCC, habituellement chaque objet obtient un vptr qui pointe vers la table virtuelle pertinente pour le type de cet objet: objet a pointeur, type a table ". Si chaque objet obtient son propre vptr et tous pointant vers la même vtable alors quel est le besoin de créer différents pointeurs vptr. Nous pouvons créer un vptr statique au niveau de la classe –

2

La norme ne garantit pas la présence du pointeur de table virtuelle, même si la plupart des implémentations l'utilisent.

En conséquence, il n'a aucun type. C'est simplement un tableau de pointeurs.

+1

Ce n'est pas un tableau de pointeurs non plus. Il n'a aucune représentation en termes de constructions C++. –

1

Il a un type dépendant du compilateur qui peut être quelque chose d'aussi long que le compilateur le comprend. Comme le langage ne dit rien à propos de vptr, ni les programmeurs ne l'utilisent dans leur code, les compilateurs sont libres de créer n'importe quel type arbitraire pour implémenter le polymorphisme d'exécution. Ce type ne doit pas être conforme au langage C++.