C++ · Avançado · Inglês · Técnico
vtable
Tabela de ponteiros para funções virtuais que as implementações de C++ usam no despacho dinâmico. Cada objeto polimórfico guarda um ponteiro oculto, o vptr, para a tabela da sua classe.
Onde usar
Explica por que objetos polimórficos têm sizeof maior e por que chamar função virtual dentro de um construtor não chega à derivada: o vptr ainda aponta para a tabela da classe em construção. Aparece em entrevistas e em depuração.
Em código
struct A { virtual void f() {} };
struct B { void f() {} };
std::cout << sizeof(A); // 8: só o vptr
std::cout << sizeof(B); // 1: classe vazia
// valores típicos em 64 bitsExemplos
A virtual call goes through the vptr and the vtable.
Uma chamada virtual passa pelo vptr e pela vtable.
The object grew by eight bytes because of the vptr.
O objeto cresceu oito bytes por causa do vptr.
Cuidado
O padrão da linguagem não exige vtable; é um detalhe de implementação, embora seja o mecanismo de fato em GCC, Clang e MSVC.
Sinônimos
tabela de funções virtuais
Origem
Contração de virtual table, tabela virtual.