2009-08-28 22 views
3

Je parcourais le code VTK 5.4.2, et n'arrive pas à comprendre comment fonctionne la fonction Delete(). Je veux dire, la fonction Delete() est dans vtkObjectBase et est virtuelle, mais, à travers quelle chaîne de commandes est le destructeur de la classe vtkDoubleArray (par exemple) exécuté?VTK Delete() et la suppression des données

meilleures salutations,

mightydodol

Répondre

6

vtkObjectBase Supprimer() appelleront UnRegisterInternal. Si les classes ReferenceCount sont inférieures ou égales à 1, elles appellent delete sur la classe.

5

C'est une sorte de collecteur d'ordures de comptage de référence.

Si vous regardez vtkObjectBase, il y a trois fonctions - Register, UnRegister et Delete. Ce sont ceux qui effectuent le comptage de référence.

Lorsque vous enregistrez une instance, cela augmente le nombre de références. Lorsque vous le désinscrivez, il diminue. Quand la ref. le nombre atteint 0, il est supprimé. Lorsque vous créez un objet à l'aide de New(), il commence par un nombre de références égal à 0. Chaque fois que vous en voulez une instance indépendante, vous appelez Register sur celui-ci et incrémente la référence. compter. Delete() est juste un autre nom pour UnRegister().

Si vous définissez un objet sur un autre objet (en affectant une instance de vtkPolyData à un algorithme, par exemple), il appelle Enregistrer avec l'instance que vous définissez (l'algorithme) comme parent. Maintenant, lorsque le parent (algorithme) est supprimé, ses enfants sont trouvés et supprimés avec lui.

Il y a aussi une méthode pour s'assurer qu'ils ne vont pas dans un festival cyclique des UnRegisters mutuels quand deux objets se réfèrent l'un à l'autre (vtkRenderer et vtkRenderWindow, par exemple), mais c'est fondamentalement ça.

1

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

Questions connexes