Я пытаюсь понять утверждение в книге с эффективным С++. Ниже приведена диаграмма наследования для множественного наследования.
Теперь в книге говорится, что для vptr требуется отдельная память в каждом классе. Также он делает следующее утверждение
Нечетность на приведенной выше диаграмме состоит в том, что есть только три vptrs, хотя задействованы четыре класса. Реализации могут генерировать четыре vptrs, если они нравятся, но три достаточно (оказывается, что B и D может совместно использовать vptr), и большинство реализаций используют эту возможность, чтобы уменьшить накладные расходы, генерируемые компилятором.
Я не видел никакой причины, по которой в каждом классе есть потребность в отдельной памяти для vptr. У меня было понимание, что vptr унаследовано от базового класса, каков бы ни был тип наследования. Если предположить, что он показал результирующую структуру памяти с унаследованным vptr, как они могут сделать утверждение, что
B и D могут совместно использовать vptr
Может кто-нибудь прояснить немного о vptr в множественном наследовании?
- Нужен ли нам отдельный vptr в каждом классе?
- Также, если выше верно, почему B и D могут совместно использовать vptr?