Tout en déboguant l'un des cœurs du programme, je suis tombé sur le scénario où son objet contenu polymorphe perd son VPTR et je peux voir qu'il pointe de pointer vers NULL. P>
Quel pourrait être le scénario lorsqu'un objet perd son VPTR. P>
Merci d'avance, BRJESH P>
3 Réponses :
La mémoire a été détruite, c'est-à-dire quelque chose qui a écrasé la mémoire. P> li>
Vous l'avez détruit en appelant directement la suppression ou en invoquant directement le destructeur. Cela n'impose généralement pas le VPTR, il ne finira que cela, il sera simplement informé de la table équipée de la classe de base, mais cela dépend de votre mise en œuvre. P> LI> ol>
Très probablement, le cas 1. Si vous avez un débogueur comportant des points d'arrêt de mémoire et si vous pouvez reproduire le problème de manière fiable, définissez un point d'arrêt de mémoire sur le VPTR et voyez ce qui le modifie. P>
probablement quelque chose qui a écrasé l'objet entier. Quelque chose comme ceci: qui va bien jusqu'à ce qu'il soit utilisé sur un objet avec VPTR. P> P>
Cette construction ne doit pas être utilisée sur une classe ayant des données non-POD, pas seulement celles avec des tables en V.
Il est peut-être que vous essayez d'utiliser la table V pendant le destructeur de votre objet. La table V n'est pas disponible pour le moment. P>
Cet objet implique-t-il au moins une fonction code> virtuelle code>? Même si ce n'est pas le cas, il y a peu de chance que le VPTR soit
null code> tel qu'il est (souvent) utilisé pour stocker le
typeinfo code>.
Êtes-vous sûr que la mémoire est en cours de nettoyage? Il pourrait être dû à ce comportement que vous avez implémenté.
Vous avez la gamme complète de comportement indéfini i> à choisir de - et c'est beaucoup.
@Vijay: C'est faux, car
typeid code> ne fonctionne polymorphiquement si la classe en question est polymorphe, c'est-à-dire qu'il a au moins une fonction virtuelle. Cela a été défini de cette manière pour éviter les compilateurs ayant à inclure une VPTR dans chaque classe i>.
@sbi oui, mais ne parlons-nous pas de types polymorphes ici?
@Vijay: OK, ma référence était suspendue. Je faisais référence à votre "même si ce n'est pas ...". Ce serait un compilateur amusant où des objets sans fonctions virtuelles auraient une VPTR.