Pergunta

Sei que, como implementar a resolução de chamadas de função virtual, não faz parte do C ++ StandRads nem diz nada sobre VPTR ou Table V, mas deixe-me fazer essa pergunta aqui.

Ouvi dizer que a Table V é uma técnica comum usada pelos compiladores para implementar a resolução de chamadas da função virtual. Meu poço sobre isso é que existe apenas uma tabela virtual por classe, por processo.

O que me pergunto é: quando a tabela V é criada para uma aula?
É quando a classe de um determinado tipo (que precisa de uma mesa V) é criado em um espaço de processo pela primeira vez?
Todos os outros objetos criados posteriormente desse tipo nesse espaço de processo refere-se à tabela V que já foi criada?
Quando essa mesa em V será excluída?

Lamento se isso é um tipo de pergunta muito subjetiva ou de discussão, mas essas perguntas permanecem em minha mente por um tempo e sinto que tudo bem fazendo aqui.

Foi útil?

Solução

A tabela V é estaticamente alocada e nunca é excluída, nem é explicitamente alocada. Os ponteiros em qualquer objeto específico são constantes.

Outras dicas

o FAQ C ++ fornece uma explicação simplificada do mecanismo vtable. Você deve lê -lo, embora provavelmente tenha que passar por sua documentação específica do compilador para obter mais detalhes.

As idéias mais importantes do meu ponto de vista:

  • O vtable para um tipo é estático e construído em tempo de compilação
  • Cada uma das instâncias do tipo contém um ponteiro para esta tabela
  • Como este ponteiro é inicializado no momento da construção, uma função de membro virtual nunca deve ser chamada do construtor

O VTable é dados estáticos disponíveis imediatamente na carga. BTW, geralmente é incluído na unidade de compilação que contém a definição para a primeira função virtual não interna na classe (e que a heurística leva ao problema quando há apenas uma função virtual que está embutida).

Acredito que tudo é definido na implementação, por isso é difícil dar uma resposta universal a essa pergunta. Acredito que o VTable deve ser uma espécie de membro da classe estática.

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