﻿# V1052\. Declaring virtual methods in a class marked as 'final' is pointless\.

Анализатор обнаружил присутствие виртуального метода в классе, помеченном как 'final'\. 

После рефакторинга или вследствие ошибочного проектирования класса могло получиться так, что класс был объявлен как завершенный \('final'\), но при этом в него были добавлены непереопределенные виртуальные методы\.

Такая структура класса не имеет смысла, и стоит проверить, не была ли нарушена логика наследования самого класса\. Кроме этого, создание такого класса может приводить к хранению лишнего указателя на виртуальную таблицу методов и падению производительности\.

Анализатор выдаст предупреждение для следующего класса:

```cpp
struct Cl final // <= V1052
{
  virtual ~Cl() {}
};

struct BaseClass
{
  virtual void foo(int);
};

struct DerivedClass final : BaseClass // <= V1052
{
  virtual void bar(float);
};
```

Если виртуальный метод / деструктор завершенного класса переопределяет виртуальный метод / деструктор базового класса, предупреждение выдано не будет:

```cpp
struct BaseClass
{
  virtual void foo();
  virtual ~BaseClass();
};

struct DerivedClass final : BaseClass // ok
{
  virtual void foo() override;
  virtual ~DerivedClass();
};
```