我的公司使用Parasoft来验证我们的c / c ++程序的正确性。
在源代码中,许多类不用作基类,并且它们没有虚拟成员函数。但他们继承了其他阶级。以下是示例代码:
class class_a : public base{
protected:
int* pa;
public:
class_a();
~class_a(){free(pa);};
int* get_a(){return pa};
...
}
然而,parosoft说:
析构函数~class_a应该是虚拟的
如果我将析构函数更改为虚拟,则违规将消失。但我认为这不是解决问题的正确方法。
那么,这只是错误的违规消息还是我们的代码中确实存在一些缺陷?
什么可能导致这种寄生虫错误?
在什么条件下,parasoft会显示相同的错误消息?
跟进: 其中许多类定义了与其基类完全相同的函数。这些函数是非虚函数。
答案 0 :(得分:0)
让工具知道该类不是基类:
class class_a final {
该工具应该知道在final
类中有一个虚拟析构函数是没有意义的。
答案 1 :(得分:0)
原因很简单。因为基类具有虚拟成员函数,但其析构函数是非虚拟的。