побочные эффекты виртуального публичного класса в C ++ - PullRequest
4 голосов
/ 09 марта 2011

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

class L { /* ... */ }; // indirect base class
class B1 : virtual public L { /* ... */ };
class B2 : virtual public L { /* ... */ };
class D : public B1, public B2 { /* ... */ }; // valid

Есть ли у нас побочный эффект при использовании виртуального публичногомы не используем его для одиночного наследования.Например,

class L { /* ... */ }; // indirect base class
class B1 : virtual public L { /* ... */ };
class D : public B1 { /* ... */ }; // valid

совпадает с

class L { /* ... */ }; // indirect base class
class B1 : public L { /* ... */ };
class D : public B1 { /* ... */ }; // valid

?Я имею в виду, просто ли сделать родительский класс виртуальным для всех возможных случаев?

Ответы [ 2 ]

7 голосов
/ 09 марта 2011

Так же безопасно сделать родительский класс виртуальным «на всякий случай».Стандарт не определяет, как будет реализовано виртуальное наследование, но, вероятно, будет небольшое снижение производительности.Если вы не пишете что-то критически важное для производительности, вам не нужно беспокоиться об этом.

3 голосов
/ 09 марта 2011

http://www.phpcompiler.org/articles/virtualinheritance.html

классы должны быть расширены с помощью одного или нескольких виртуальных указателей, а для простого поиска атрибутов в объекте теперь требуется две косвенные ссылки через виртуальную таблицу

В отличие от виртуальных функций.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...