ExpertiDict

C++ · Avançado · Inglês · Técnico

vtable

ˈviː.teɪ.bəlsubstantivo

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 bits

Exemplos

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.

Veja também

Todos os termos de C++