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