Existe-il des compilateurs qui mettent en œuvre Virtuel Mécanisme de toute autre façon autre que le pointeur virtuel et virtuel tableau mécanisme? Comme ce que j'ai vu(lu g++,Microsoft visual studio) mettre en œuvre par le biais de table virtuelle, mécanisme de pointeur. Donc, pratiquement, il n'existe aucun autre compilateur implémentations?
Tous les compilateurs que je sais de l'utilisation de la vtable mécanisme.
C'est une optimisation qui est possible parce que le C++ est statiquement type cochée.
Dans certains plus dynamique des langues, il s'agit plutôt d'une dynamique de recherche de la classe de base de la chaîne(s), à la recherche d'une mise en œuvre d'une fonction membre appelée pratiquement, à partir de la plupart des dérivés de la classe de l'objet. Par exemple, c'est la façon dont il a travaillé dans l'original Smalltalk. Et le C++ standard décrit l'effet d'un appel virtuel comme si cette recherche avait été utilisée.
En Borland/Turbo Pascal dans les années 1990 ces dynamiques de recherche a été utilisé pour rechercher des gestionnaires de l'API Windows de la fenêtre "messages". Et je pense que peut-être le même en Borland C++. Il a été, en plus de la normale de la vtable mécanisme, utilisé uniquement pour les gestionnaires de messages.
Si elle a été utilisée dans Borland/Turbo C++ – je ne me souviens pas – alors qu'il était en faveur d'une des extensions de langage que vous a permis d'associer l'id de message avec le message des fonctions de gestionnaire.
Le sizeof de toute la classe d'une fonction virtuelle sera de la taille d'un pointeur(vptr à l'intérieur de la ce) sur ce compilateur, Donc vu que virtuel ptr et tbl mécanisme lui-même est le compilateur de mise en œuvre de cette déclaration que j'ai faite ci-dessus sera toujours vrai?
Officiellement pas (même avec une hypothèse de vtable mécanisme), il dépend du compilateur. Puisque la norme n'exige pas la vtable mécanisme, il ne dit rien sur le placement de la vtable pointeur dans chaque objet. Et d'autres règles de laisser le compilateur librement ajouter rembourrage, les octets non utilisés à la fin.
Mais, dans la pratique, peut-être. ;-)
Cependant, il n'est pas quelque chose que vous devez compter sur un, ou que vous avez besoin de s'appuyer sur. Mais dans l'autre sens, vous pouvez exiger ce, par exemple, si vous êtes à la définition de l'ABI. Puis un compilateur qui ne l'est pas, tout simplement n'est pas conforme à vos besoins.
Cheers & hth.,