анализатором кода от Polyspace? Не могу вкурить почему он ругается на очень простой код:
struct Base
{
void call(){ return fn(); }
virtual void fn(void) = 0;
};
struct Foo final: Base
{
void fn(void) final {}
};
int main()
{
static Foo foo; // ошибки нет, если убрать static
foo.call();
}
Ошибка: Incorrect object oriented programming Error: incorrect this-pointer type of fn
Что в этом коде опасного/неопределенного. Где можно нарушить ООП или выстрелить в ногу?
а если так? struct Base { void call(){ return fn(); } virtual void fn(void) = 0; virtual ~Base(){} };
Спасибо за ответ, но это другое. Да, я знаю что нужен виртуальный деструктор и он там был, я его убрал для уменьшения количества кода. Его наличие влияет на другие проверки, но не на эту ошибку.
Обсуждают сегодня