Виртуальный указатель

Что такое виртуальный указатель? Всем привет, Сегодня у меня было телефонное интервью, и у меня возник вопрос: "Что такое виртуальный указатель?" Я наткнулся на этот, так что после того, как он был закончен, я попробовал Google. К сожалению, это дало мне только ссылки на виртуальные таблицы.

Итак, что такое виртуальный указатель на простом английском языке? Как вы его определяете?

Спасибо.

Ответ 1

Нет такой вещи, как "виртуальный указатель".

Есть несколько вещей, которые мог бы сказать интервьюер:

  • Указатель на полиморфный класс
  • Указатель на vtable полиморфного класса (credit @Maxim)
  • Указатель внутри vtable полиморфного класса
  • Умный объект-указатель с переопределенным operator->
  • Указатель на виртуальную функцию-член (credit @Matthieu M)

Однако, что касается "виртуального указателя", такой вещи нет.

Ответ 2

Моя интерпретация будет: содержимое виртуальных методов vtable-указателей.

Не очень хорошая формулировка, ИМХО.

Ответ 4

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

Для выполнения позднего связывания компилятор создает эту таблицу vtable для каждого класса, который содержит виртуальные функции и для производного от него класса. Компилятор помещает адреса виртуальных функций для этого конкретного класса в 'vtable.

Когда вызов виртуальной функции выполняется с помощью указателя базового класса, компилятор спокойно вставляет код для извлечения VPTR и ищет адрес функции в VTABLE, тем самым вызывая правильную функцию и вызывая позднюю/динамическую привязку.

Ответ 5

Это может также означать создание указателя функции виртуального/виртуального чистого метода отца и называть его с ребенком, но это не очень хорошая формулировка...