The analyzer has detected a virtual method in a class marked as 'final'.
After refactoring or due to poor class design, you may have a class declared as 'final', while it still contains non-overridden virtual methods.
Such class structure has no practical use, so it is recommended that you check if the class' inheritance logic is intact. In addition, creating such a class results in having to store an extra pointer to the virtual method table and performance drop.
The following example class will trigger the warning:
struct Cl final // <= V1052 { virtual ~Cl() {} }; struct BaseClass { virtual void foo(int); }; struct DerivedClass final : BaseClass // <= V1052 { virtual void bar(float); };
If the virtual method / destructor of the final class overrides the virtual method / destructor of the base class, no warning will be issued:
struct BaseClass { virtual void foo(); virtual ~BaseClass(); }; struct DerivedClass final : BaseClass // ok { virtual void foo() override; virtual ~DerivedClass(); };