Поделиться через


Предупреждение C26443

Переопределяющий деструктор не должен использовать явные описатели override или virtual.

Это предупреждение было удалено в Visual Studio 16.8, чтобы отразить изменения в C.128 в основных рекомендациях по C++.

C++ Core Guidelines

C.128. Виртуальные функции должны указывать именно одну из виртуальных, переопределения или финала.

Текущий консенсус по основным рекомендациям заключается в исключении деструкторов из рекомендации "переопределения явно".

Примечания.

  • Флаги правил переопределяют деструкторы, которые явно используют описатели virtual или override.
  • Деструкторы по-прежнему могут использовать описатель final из-за его специальной семантики.
  • Предупреждения отображаются в определениях функций, а не объявлениях. Это может быть запутано, так как определения не имеют виртуальных описателей, но предупреждение по-прежнему подходит.

Имя анализа кода: NO_EXPLICIT_DTOR_OVERRIDE

Пример: явное "переопределение"

class Transaction {
public:
    virtual ~Transaction();
    // ...
};

class DistributedTransaction : public Transaction {
public:
    ~DistributedTransaction() override { // C26443
        // ...
    }
};

См. также

C.128. Виртуальные функции должны указывать именно одну из виртуальных, переопределения или окончательных