Как работает виртуальное наследование?

  1. Использует ли виртуальное наследование vTable? Если да или нет, то как это реализовано
  2. Как виртуальное наследование ведет себя в памяти?
  3. Любая другая альтернатива для виртуального наследования

Действительно ценю концептуальное объяснение.

6

Решение

Виртуальное наследование реализуется по-разному в зависимости от компилятора.

1) Да, и vc, и gcc используют указатель vTable. Но у vc есть другой указатель ref как указатель виртуальной базы.

2) Для классического виртуального наследования, такого как левый < Верхний; Правильно < Верхний; Низ < Лево и право
Стек должен быть таким:

Left.vptr  // -> to its vtable

Left::element_in_left

Right.vptr

Right::element_in_right

Bottom::element_in_bottom

Top::element_in_top

Программы используют vptr для поиска vtable, для gcc в viable есть значение виртуального базового смещения. vptr + base смещение даст родительский адрес.

3) Я не уверен, что ты имеешь в виду. Есть разные способы реализовать это в компиляторах C ++. И другие языки имеют свои способы привязки функций.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]