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