Зачем нужны виртуальные таблицы при вызове виртуальных функций во время выполнения?
Я следовал этому уроку, пытаясь понять 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++ будет использовать ее. Это просто самая популярная техника реализации, используемая сегодня компиляторами.