-2

我的公司使用 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 错误?

parasoft 在什么情况下会显示相同的错误信息?

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

4

2 回答 2

0

原因很简单。因为基类有一个虚成员函数,但它的析构函数是非虚的。

于 2016-08-23T11:56:21.830 回答
0

只需让工具知道该类不打算作为基类:

class class_a final {

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

于 2016-08-17T07:45:57.447 回答