Question

Je sais que, comment implémenter la résolution des appels de fonction virtuelle ne fait pas partie des standrads C ++ ni qu'il dit quoi que ce soit sur VPTR ou V-Table, mais permettez-moi de poser cette question ici.

J'ai entendu dire que V-Table est une technique courante utilisée par les compilateurs pour implémenter la résolution d'appels de fonction virtuelle. Mon compresseur à ce sujet est qu'il n'y a qu'une table virtuelle est nécessaire par classe, par processus.

Ce que je me demande, c'est quand la table V est-elle créée pour une classe?
Est-ce lorsque la classe d'un type donné (qui a besoin d'une table V) est créée dans un espace de processus pour la première fois?
Tous les autres objets créés par la suite de ce type dans cet espace de processus, se réfèrent à la table V qui est déjà créée?
Quand cette table V sera-t-elle supprimée?

Je suis désolé si c'est un type de question trop subjectif ou de discussion, mais ces questions persistent dans mon esprit pendant un certain temps et je pense que c'est OK le demander ici.

Était-ce utile?

La solution

La table en V est allouée statiquement et n'est jamais supprimée, et elle n'est pas explicitement allouée. Les pointeurs dans un objet spécifique donné sont des constantes.

Autres conseils

La C ++ FAQ Fournit une explication simplifiée du mécanisme VTable. Vous devriez lire, même si vous devrez probablement passer par votre documentation de compilateur particulière pour plus de détails.

Les idées les plus importantes de mon point de vue:

  • Le VTable pour un type est statique et construit au moment de la compilation
  • Chacune des instances de type contient un aiguille à cette table
  • Parce que ce pointeur est initialisé au moment de la construction, une fonction de membre virtuel ne doit jamais être appelée du constructeur

Le VTable est des données statiques donc disponibles immédiatement à la charge. BTW, il est généralement regroupé dans l'unité de compilation qui contient la définition de la première fonction virtuelle non en ligne de la classe (et que l'heuristique mène à un problème lorsqu'il n'y a qu'une seule fonction virtuelle qui est en ligne).

Je crois que tout est défini, il est donc difficile de donner une réponse universelle à cette question. Je crois que le VTable devrait être une sorte de membre de classe statique.

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