La surcharge des classes D
Question
J'ai pensé que j'ai entendu que le D des classes de deux mots (2 void*) des frais généraux, au lieu d'un mot nécessaire en C++.J'ai aussi entendu dire que la vtable disposition est incompatible avec le C++.Je me souviens correctement?Si oui, quelle est la justification de ces décisions?
La solution
Quelques petites choses:
- En C++, une classe qui n'a pas de fonctions virtuelles auront zéro les frais généraux.
- En D, une classe toujours hérite des fonctions virtuelles à partir de
Object
, donc il y en a toujours qui__vptr
les frais généraux, mais aussi a une__monitor
, que le C++ les objets de la classe n'ont pas. - Dans les deux C++ et D, il y aura des
vptr
pour chaque interface que la classe implémente.
La vtable disposition est incompatible avec le C++ parce que D contient un pointeur vers un TypeInfo
exemple, qui a runtime type d'informations à propos de la classe.C++ n'est évidemment pas le cas, donc c'est incompatible.
Autres conseils
Le pointeur supplémentaire est à un objet de moniteur pour les classes synchronisées (il y a apparemment été parlé de le retirer pour les classes non synchronisées, mais cela n'est pas arrivé).La mise en page est documentée dans le section abi de la spécification.
Je ne sais pas comment la mise en page disponible diffère de la manière dont les compilateurs C ++ le font.Quelqu'un d'autre peut probablement répondre à cela.