Frage

Ich war gerade durch den VTK 5.4.2 Code, und kann nicht scheinen zu verstehen, wie funktioniert die Delete () Funktion funktioniert. Ich meine, ist die Delete () Funktion in vtkObjectBase und ist virtuell, sondern durch das, was Kette von Befehlen ist die destructor der vtkDoubleArray Klasse (zum Beispiel) ausgeführt?

Mit freundlichen Grüßen,

mightydodol

War es hilfreich?

Lösung

vtkObjectBase Delete () wird UnRegisterInternal nennen. Wenn die Klassen ReferenceCount weniger als oder gleich 1 ist es auf die Klasse löschen nennen.

Andere Tipps

Es ist eine Art von Referenzzählung Müll-Sammler.

Wenn Sie auf vtkObjectBase aussehen, gibt es drei Funktionen - Register, UnRegister und Löschen. Dies sind diejenigen, die die Referenzzählung durchführen.

Wenn Sie eine Instanz registrieren, erhöht es einen Referenzzähler. Wenn Sie es UNREGISTER, es verringert. Wenn der Schiedsrichter. Zahl 0 erreicht, wird es gelöscht. Wenn Sie ein Objekt mit New () erstellen, beginnt es mit einem Referenzzähler von 0. Jedes Mal, wenn eine unabhängige Instanz davon möchten, können Sie Register auf es nennen, und es erhöht den ref. Anzahl. Löschen () ist nur ein anderer Name für UnRegister ().

Wenn Sie ein Objekt auf ein anderes Objekt gesetzt (eine vtkPolyData Instanz auf einen Algorithmus als Eingabe zum Beispiel Einstellung), nennt es Register mit der Instanz du bist Einstellung in (der Algorithmus) als Elternteil. Nun, wenn der übergeordnete (Algorithmus) gelöscht wird, werden seine Kinder gefunden und gelöscht mit.

Es gibt auch eine Methode, um sicherzustellen, dass sie gehen nicht in ein zyklisches Festival der gegenseitigen abmeldet, wenn zwei Objekte zueinander beziehen (vtkRenderer und vtkRenderWindow, zum Beispiel), aber das ist im Grunde ist es.

Auch: Sie sollte nicht sehr oft () müssen Löschen aufzurufen. Es ist fast immer möglich, eine vtkSmartPointer stattdessen zu verwenden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top