Pregunta

estaba navegando a través del código 5.4.2 VTK, y parece que no puede entender cómo hace las obras Eliminar) función (. Es decir, la función Borrar () es en vtkObjectBase y es virtual, pero, a través de lo que la cadena de comandos es el destructor de la clase vtkDoubleArray (por ejemplo) ejecutado?

Saludos,

mightydodol

¿Fue útil?

Solución

vtkObjectBase Eliminar () llamará UnRegisterInternal. Si las clases ReferenceCount es inferior o igual a 1 se llamará a borrarse de la clase.

Otros consejos

Es una especie de recuento de referencias liberador de memoria.

Si nos fijamos en vtkObjectBase, hay tres funciones - registrar, desregistrar y Eliminar. Estos son los que realizan el recuento de referencias.

Cuando se registra una instancia, se incrementa un contador de referencia. Cuando lo liberas, disminuye. Cuando el árbitro. recuento llegue a 0, se elimina. Cuando se crea un objeto utilizando Nueva (), se inicia con un recuento de referencia de 0. Cada vez que desee una instancia independiente de ella, se llama a Registro en él, y se incrementa el árbitro. contar. Eliminar () es sólo otro nombre para UnRegister ().

Si define un objeto a otro objeto (el establecimiento de una instancia vtkPolyData a un algoritmo como entrada, por ejemplo), que denomina Registro con la instancia se está configurando en (el algoritmo) como el padre. Ahora, cuando se elimina el padre (algoritmo), sus hijos se encuentran y se eliminan con él.

Hay también un método para asegurarse de que no entran en un festival cíclica de Desregistra mutuos cuando dos objetos se refieren el uno al otro (vtkRenderer y vtkRenderWindow, por ejemplo), pero eso es básicamente la misma.

También: que no es necesario llamar Eliminar () muy a menudo. Casi siempre es posible utilizar un vtkSmartPointer lugar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top