AUTOSAR C++14 Rule M10-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 и как виртуальный и невиртуальный базовый класс. Final объект содержит по крайней мере две копии Base подобъект.

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

Группа: производные классы

Введенный в R2019a