MISRA C++:2008 Rule 10-1-2

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

Описание

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

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

Объяснение

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

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

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

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

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

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

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

Группа: производные классы
Категория: необходимый
Введенный в R2013b