«Representative Line»: алмаз в... Заметка
The Daily WTF на русском

«Representative Line»: алмаз в сыром виде

Виртуальное наследование — это техника C++, используемая для решения "проблемы ромба" в сценариях множественного наследования. Эта проблема возникает, когда класс наследует от двух классов, оба из которых имеют общий базовый класс. Без виртуального наследования производный класс будет содержать две отдельные копии членов базового класса, что приведет к неоднозначности. Используя виртуальное наследование, например class B : public virtual A, производный класс D, наследующий от B и C, будет иметь только один экземпляр базового класса A. Это гарантирует доступ к единой копии членов A. Однако виртуальное наследование имеет эффект только тогда, когда существуют дальнейшие производные классы, которые столкнутся с неоднозначностью. Коллега Мэнди злоупотребляет виртуальным наследованием, применяя его даже тогда, когда это не требуется. Например, маркировка final класса SomeSpecificDerivedClass с public virtual SomeBaseClass не имеет практической пользы. От final класса нельзя наследовать, что делает объявление виртуального наследования избыточным. Следовательно, использование виртуального наследования по умолчанию во всех ситуациях, как это делает коллега Мэнди, часто является неэффективной и ненужной практикой.