exponenta event banner

Правило AUTOSAR C++ 14 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