Я собираюсь предположить, что диаграмма, которую вы дали, думает, что C ++ - это C с дополнительными функциями, и с этой точки зрения сделала предположения о поведении, определяемом реализацией.
Он читает список базовых спецификаторов слева направо, сначала в глубину, и предполагает, что виртуальное наследование является одним указателем. Каждый помеченный блок соответствует подобъектам нестатических членов-данных классов (которых нет). Ящики без меток являются указателями на виртуальные базы.
Мы начинаем с E
. Он имеет не виртуальную C
базу, виртуальную B
базу и виртуальную D
базу.
У C
есть виртуальный подобъект B
, который становится указателем.
Виртуальный B
уже имеет указатель, который будет указывать на то же место, что и база C
.
Виртуальному D
нужен указатель.
Это завершает не виртуальные базы E
, но все еще существуют виртуальные базы, в которых еще нет хранилища.
Мы делаем B
, который имеет не виртуальный A
, и записываем смещение в E
.
Мы делаем D
, который имеет не виртуальный B
, который имеет не виртуальный A
, и записываем смещение в E