AUTOSAR C++ 14 правил M10-1-1

Классы не должны быть выведены от виртуальных основ.

Описание

Управляйте определением

Классы не должны быть выведены от виртуальных основ.

Объяснение

Использование виртуальных основ может привести ко многим запутывающим поведениям.

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

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

Если вы ожидаете нарушение правила, но не видите его, обратитесь к Кодированию Стандартных Нарушений, Не Отображенных.

Примеры

развернуть все

class Base {};
class Intermediate: public virtual Base {}; //Noncompliant
class Final: public Intermediate {};

В этом примере средство проверки правила повышает нарушение, когда класс Intermediate выведен от класса Base с ключевым словом virtual.

Следующее поведение может быть потенциальным источником беспорядка. Когда вы создаете объект типа Final, конструктор Final непосредственно вызывает конструктора Base. Любой вызов конструктора Base от конструктора Intermediate проигнорирован. Вы можете видеть неожиданные результаты, если вы не учитываете это поведение.

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

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

Введенный в R2019a