Pergunta

Eu estava navegando pelo código VTK 5.4.2 e não consigo entender como funciona a função delete (). Quero dizer, a função Delete () está na vtkobjectBase e é virtual, mas, através de que cadeia de comandos é o destruidor da classe VtkDouBleArray (por exemplo) executada?

Cumprimentos,

MightyDodol

Foi útil?

Solução

O VTKObjectBase Delete () chamará o UNCISTERINTERINTAL. Se as classes referenceCount forem menores ou iguais a 1, ele ligará para excluir na classe.

Outras dicas

É um tipo de coletor de lixo de contagem de referência.

Se você olhar para o VTKObjectBase, existem três funções - registrar, não registrar e excluir. Estes são os que realizam a contagem de referência.

Quando você registra uma instância, ela aumenta uma contagem de referência. Quando você o registra, diminui. Quando o ref. A contagem atinge 0, é excluída. Quando você cria um objeto usando o novo (), ele começa com uma contagem de referência de 0. Cada vez que você deseja uma instância independente, você chama o registro nele e incrementa o ref. contar. Delete () é apenas mais um nome para o UNCISTER ().

Se você definir um objeto para outro objeto (configurando uma instância VTKPolyData como um algoritmo como entrada, por exemplo), ele chama o registro na instância em que você está configurando (o algoritmo) como pai. Agora, quando o pai (algoritmo) é excluído, seus filhos são encontrados e excluídos junto com ele.

Há também um método para garantir que eles não entrem em um festival cíclico de não registros mútuos quando dois objetos se referem um ao outro (vtkrenderer e vtkrenderwindow, por exemplo), mas é basicamente isso.

Além disso: você não deve precisar ligar para excluir () com muita frequência. É quase sempre possível usar um VTKSMARTPointer.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top