Parasoft违规:析构函数~dest应该是虚拟的

时间:2016-08-17 02:30:29

标签: c++ virtual virtual-destructor parasoft

我的公司使用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会显示相同的错误消息?

跟进: 其中许多类定义了与其基类完全相同的函数。这些函数是非虚函数。

2 个答案:

答案 0 :(得分:0)

让工具知道该类不是基类:

class class_a final {

该工具应该知道在final类中有一个虚拟析构函数是没有意义的。

答案 1 :(得分:0)

原因很简单。因为基类具有虚拟成员函数,但其​​析构函数是非虚拟的。