AUTOSAR C++14 Rule M10-1-2

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

Описание

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

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

Объяснение

Это правило менее строго, чем AUTOSAR C++14 Rule M10-1-1. Правило M10-1-1 запрещает использование виртуальной основы где угодно в вашем коде, потому что виртуальная основа может привести к потенциально запутывающему поведению.

Правило M10-1-2 позволяет использование виртуальных основ в одной ситуации, где они полезны, то есть, как общий базовый класс в ромбовидных иерархиях.

Например, следующая ромбовидная иерархия нарушает правило M10-1-1, но не правило M10-1-2.

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

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

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

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

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

Введенный в R2019a