Моя компания использует Parasoft для проверки правильности нашей программы c/C++.Нарушение Parasoft: Destructor ~ dest должен быть виртуальным
В исходном коде многие классы не используются в качестве базового класса и не имеют виртуальных функций-членов. Но они наследуются от другого класса. Вот пример кода:
class class_a : public base{
protected:
int* pa;
public:
class_a();
~class_a(){free(pa);};
int* get_a(){return pa};
...
}
Однако parosoft говорит:
деструктор ~ class_a должен быть виртуальным
Если изменить деструктор виртуальным, нарушение disappears.But Я не думаю, что это правильный способ исправить это.
Итак, это просто сообщение об ошибке или есть некоторые недостатки в нашем коде?
Что может вызвать такую ошибку в парашюте?
При каких условиях парасофт покажет такое же сообщение об ошибке?
Последующие действия: Многие из этих классов определяют функции, которые полностью совпадают с их базовым классом. Эти функции не являются виртуальными.
Если он не будет использоваться в качестве базового класса, вы можете изменить 'pa' с' protected' на 'private'. – songyuanyao
О, я вижу. Но для классов, которые имеют только частные переменные-члены, parasoft показывает те же сообщения о нарушениях. @ Songyuanyao –
Двигатели SCA склонны сообщать о ложных срабатываниях, искать лучшего может быть. –