MISRA C++:2008 Rule 10-1-3

Доступный базовый класс не должен быть как виртуальным, так и невирусным в одной иерархии

Описание

Определение правила

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

Объяснение

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

Поиск и устранение проблем

Если вы ожидаете нарушения правил, но не видите его, обратитесь к разделу «Стандартные нарушения кодирования не отображаются».

Примеры

расширить все

class Base {};
class Intermediate1: virtual public Base {};
class Intermediate2: virtual public Base {};
class Intermediate3: public Base {};
class Final: public Intermediate1, Intermediate2, Intermediate3 {}; //Noncompliant

В этом примере класс Base наследуется в Final как виртуальный, так и невирусный базовый класс. The Final объект содержит по меньшей мере две копии Base подобъект.

Проверяйте информацию

Группа: Производные классы
Категория: Требуемая
Введенный в R2013b