, вы не можете использовать виртуальный базовый подобъект vptr в качестве вашего vptr.

аюсь разобраться в утверждении в книге эффективно C ++. Ниже приведена схема наследования для множественного наследования.

Теперь в книге говорится, что для каждого vptr требуется отдельная память в каждом классе. Также это делает следующее утверждение

Странность на приведенной выше диаграмме состоит в том, что существует только три vptr, хотя участвуют четыре класса. Реализации свободны генерировать четыре vptr, если им нравится, но трех достаточно (оказывается, что B и D могут совместно использовать vptr), и большинство реализаций используют эту возможность, чтобы уменьшить накладные расходы, сгенерированные компилятором.

Я не мог видеть никакой причины, почему в vptr есть потребность в отдельной памяти в каждом классе. У меня было понимание, что vptr наследуется от базового класса, независимо от типа наследования. Если мы предположим, что он показал результирующую структуру памяти с унаследованным vptr, как они могут сделать утверждение, что

B и D могут поделиться vptr

Может кто-нибудь объяснить немного о vptr в множественном наследовании?

Нужен ли отдельный vptr в каждом классе?Также, если выше, правда, почему B и D могут поделиться vptr?

Ответы на вопрос(5)

Ваш ответ на вопрос