Si nous écrivons une fonction virtuelle, elle ajoute un objet vtable dans cette classe. Est-ce vrai pour le destructeur virtuel aussi? Est-ce que vtable est utilisé pour implémenter la virtualité du destructeurExiste-t-il une relation entre Virtual destructor et Vtable?
Répondre
Oui. Certaines informations sont nécessaires pour permettre au destructeur droit d'ê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 n'a pas d'importance (bien que le lien dynamique implique probablement qu'il s'agit d'un pointeur). Naturellement, cette information doit être adjacente à (à l'intérieur) de l'objet pointé. Ajouter une méthode virtuelle de n'importe quel type, y compris un destructeur, à une classe qui n'en avait pas auparavant, augmentera sizeof (class).
Oui c'est. Désolé, je n'ai pas de référence définitive pour sauvegarder mon affirmation. Mais sinon comment auriez-vous un comportement différent lorsque vous utilisez juste un pointeur sur l'objet?
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 1 fonction virtuelle a une table de pointeurs de fonction (virtuelle), le destructeur étant l'un d'eux, s'il est marqué virtuel.
Oui. Le destructeur virtuel est comme n'importe quelle autre méthode virtuelle. L'entrée Vtable sera ajoutée.
Il est traité comme n'importe quelle autre fonction normale et sera ajouté au vtable.
- 1. Relation entre CFMutableDictionary et NSMutableDictionary
- 2. C++ Héritage/questions VTable
- 3. WPF Destructor
- 4. Relation entre MSVC++ rand() et C# System.Random
- 5. WCF: relation entre NetworkCredential et Usurpation d'identité
- 6. Relation entre MembershipUser et objet IPrincipal
- 7. ubuntu et Virtual PC
- 8. Relation entre JTable, TableModel & TableData
- 9. ASP.NET MVC: relation entre les modèles et MembershipUsers
- 10. Quelle est la relation entre les réseaux bayésien et neuronal?
- 11. Virtual Earth et ASP.NET MVC
- 12. Quelle est la relation entre CRITICAL_SECTION et CCriticalSection?
- 13. Relation entre la source Opensolaris et les versions Solaris
- 14. Établir une relation à plusieurs entre deux entités
- 15. Comment peut-on inspecter une vtable dans Visual C++?
- 16. Quelle est la différence entre Supprimer et Supprimer dans une relation plusieurs-à-plusieurs dans CoolStorage
- 17. comment générer une relation many-to-many-relation dans web2py?
- 18. Comment créer une relation has_many entre deux modèles, avec plusieurs modèles entre? (Ruby on Rails ActiveRecord)
- 19. Fonctionnement interne de C# Virtual et Override
- 20. parent et enfants relation
- 21. Inverser une relation ManyToMany
- 22. Rails Has Une relation
- 23. Rails relation polymorphes et link_to
- 24. C++ erreur liée à la définition de compilation constructeur/destructor
- 25. HABTM-Relation: Créer une relation pour tous les autres documents
- 26. Hyper V Virtual PC
- 27. Lineprinters Emulator/Virtual
- 28. Clustering Virtual Earth personnalisé
- 29. ASP.NET - Virtual PC
- 30. Quelle est la relation entre MCPS (million de cycles par seconde) et la puissance consommée
Il existe d'autres mécanismes pour mettre en œuvre des méthodes virtuelles. Les vtables sont juste les plus communs (et faciles à implémenter). –