exponenta event banner

Правило AUTOSAR C++ 14 M10-1-1

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

Описание

Определение правила

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

Объяснение

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

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

Поиск неисправностей

Если вы ожидаете нарушения правила, но не видите его, обратитесь к разделу Нарушения стандартов кодирования не отображаются.

Примеры

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

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

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

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

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

Группа: Производные классы
Категория: Консультации, Автоматизированные
Представлен в R2019a