Pergunta

Se escrevermos função virtual acrescenta uma vtable em objeto dessa classe. É verdade para destruidor virtual também? É vtable usado para implementar virtualness de destructor

Foi útil?

Solução

Sim. Algumas informações é necessária para permitir o destruidor direito de ser chamado quando o objeto é excluído através de um ponteiro de classe base. Se essa informação é um índice inteiro pequeno ou um ponteiro não importa (embora ligação dinâmica provavelmente implica que é um ponteiro). Naturalmente, que as necessidades de informação a ser adjacente a (interior) o objecto pontiagudo-a.

Adicionando um método virtual de qualquer tipo, incluindo um processo de destruição, a uma classe que não tinha nada antes, vai aumentar sizeof (classe).

Outras dicas

Eu não acredito que o padrão C ++ requer qualquer mecanismo particular para produzir o comportamento correto, mas sim, que é uma implementação típica. Uma classe com pelo menos 1 função virtual tem uma tabela de função (virtual) ponteiros, o destruidor sendo um deles, se ele está marcado virtual.

Sim, é. Desculpe eu não tenho uma referência definitiva para fazer backup de minha afirmação. Mas como mais poderá obter um comportamento diferente quando se usa apenas um ponteiro para o objeto?

Sim. destrutor virtual é como qualquer outro método virtual. entrada vtable vai ser adicionados.

é tratada como qualquer outra função normal e será adicionado à TabelaV.

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