AUTOSAR C++14 Rule M10-1-1

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

Описание

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

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

Объяснение

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

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

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

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

Примеры

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

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

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

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

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

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

Введенный в R2019a