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