Domanda

stavo navigando attraverso il codice VTK 5.4.2, e non riesco a capire come fa la cancellazione) opere funzionali (. Voglio dire, la funzione Delete () è in vtkObjectBase ed è virtuale, ma, attraverso ciò che la catena di comandi è il distruttore della classe vtkDoubleArray (per esempio) eseguita?

Con i migliori saluti,

mightydodol

È stato utile?

Soluzione

vtkObjectBase Delete () chiamerà UnRegisterInternal. Se le classi ReferenceCount è inferiore o uguale a 1 si chiamerà cancellare sulla classe.

Altri suggerimenti

E 'una sorta di garbage-collector riferimento-conteggio.

Se si guarda alla vtkObjectBase, ci sono tre funzioni - Registrati, annullare la registrazione ed Elimina. Questi sono quelli che eseguono il conteggio di riferimento.

Quando si registra un esempio, si aumenta un conteggio di riferimento. Quando si annulla la registrazione di esso, diminuisce. Quando il rif. conteggio arriva a 0, viene eliminato. Quando si crea un oggetto utilizzando Nuovo (), si inizia con un conteggio di riferimento pari a 0. Ogni volta che si desidera un'istanza indipendente da esso, si chiama Registrati su di esso, e incrementa il rif. contare. Delete () è solo un altro nome per annullare la registrazione ().

Se si imposta un oggetto ad un altro oggetto (impostazione di un'istanza vtkPolyData ad un algoritmo come input per esempio), si chiama Registrati con l'istanza che si sta impostando in (l'algoritmo) come il genitore. Ora, quando il genitore (algoritmo) viene cancellato, i suoi figli sono trovati ed eliminati con esso.

C'è anche un metodo per assicurare che non vanno in una festa ciclico di Deregistra reciproci quando due oggetti si riferiscono a vicenda (vtkRenderer e vtkRenderWindow, per esempio), ma che è fondamentalmente.

Inoltre: non dovrebbe essere necessario chiamare Delete () molto spesso. E 'quasi sempre possibile utilizzare un vtkSmartPointer posto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top