Зачем нужны виртуальные таблицы при вызове виртуальных функций во время выполнения?

Я следовал этому уроку, пытаясь понять virtual table и весь процесс позади pointer а также virtual functions in C++,

Не уверен, когда у меня есть такой код:

D1 d1;
Base *dPtr = &d1;
dPtr->function1();

Зачем мне все это virtual table управление? Почему компилятор просто не назначает адрес памяти d1 (или база, если их нет) переопределена virtual function?

Я имею в виду: он мог бы разработать там во время компиляции, если ему нужен D1 functon1() адрес или Base functon1() адрес. Это знаю в то время. Зачем терять время и ресурсы позже во время выполнения, глядя на virtual tables?

Я скучаю по этому вопросу. Необычный пример?

1 ответ

Решение

Это моя функция:

void foo(Base *pBase) {
  pBase->function1();
}

Я компилирую его отдельно и выдаю вам объектный файл с заголовком. За несколько месяцев до того, как вы даже мечтали D1, Как бы компилятор "использовал адрес функции D1 напрямую" здесь?

Не может Вот почему какая-то форма косвенности необходима.

Кроме того, таблица виртуальных функций не требуется в том смысле, что каждая реализация C++ будет использовать ее. Это просто самая популярная техника реализации, используемая сегодня компиляторами.

Другие вопросы по тегам