Question

Je parcourais le code VTK 5.4.2, et ne peut pas sembler comprendre comment fonctionne le fonction de suppression (). Je veux dire, la fonction de suppression () est en vtkObjectBase et est virtuel, mais, par ce que la chaîne de commandes est le Destructeur de la classe vtkDoubleArray (par exemple) exécutée?

Cordialement,

mightydodol

Était-ce utile?

La solution

Supprimer vtkObjectBase () appellera UnRegisterInternal. Si les classes ReferenceCount est inférieure ou égale à 1, il appellera supprimer la classe.

Autres conseils

Il est une sorte de poubelle collecteur comptage référence.

Si vous regardez vtkObjectBase, il y a trois fonctions - Inscrivez-vous, désouscrire et Supprimer. Ce sont ceux qui effectuent le comptage de référence.

Lorsque vous enregistrez une instance, il augmente un nombre de référence. Lorsque vous désenregistrer, elle diminue. Lorsque l'arbitre. compte atteint 0, il est supprimé. Lorsque vous créez un objet à l'aide Nouveau (), il commence par un compte de référence de 0. Chaque fois que vous voulez une instance indépendante de celui-ci, vous appelez Inscrivez-vous sur, et il incrémente l'arbitre. compter. Supprimer () est juste un autre nom pour annuler l'enregistrement ().

Si vous définissez un objet à un autre objet (réglage d'une instance vtkPolyData à un algorithme en entrée par exemple), il appelle enregistrer avec l'instance que vous configurez dans (l'algorithme) en tant que parent. Maintenant, lorsque le parent (algorithme) est supprimé, ses enfants sont trouvés et supprimés avec.

Il y a aussi une méthode pour veiller à ce qu'ils ne vont pas dans un festival cyclique de mutuelle lorsque deux Annule l'enregistrement d'objets se réfèrent les uns aux autres (vtkRenderer et vtkRenderWindow, par exemple), mais est essentiellement cela.

En outre: vous ne devriez pas avoir besoin d'appeler Supprimer () très souvent. Il est presque toujours possible d'utiliser un vtkSmartPointer à la place.

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