Coverity报告以下代码的泄漏。我希望对理解错误有所帮助,并重新编写此代码以确保没有错误。
(错误在下面的代码中被注释为注释)

int main()
{
    ...
    B* b = ...
    //  (1) Coverity: Storage is returned from
    //      allocation function operator new
    //  (2) Coverity: Assigning ...
    A* a = new A();

    // (3) Coverity: noescape: Resource a is not freed
    //     or pointed-to in add_a_to_b
    b->add_a_to_b( *a );
    ...

   // (4) Coverity: Resource leak: Variable a going out
   //     of scope leaks the storage it points to.
}

class B {
public:
    std::vector<A> a_vector;
    void add_a_to_b( const A& a )
    {
       a_vector.push_back( a );
    }

-编辑-

我对B::add_a_to_b函数有一个特殊的问题,这也许反射(reflect)了我对引用的不完整理解:a_vector是否存储对A的引用,还是创建传递给add_a_to_b的对象的副本?

最佳答案

您有内存泄漏,因为您调用了new,而没有调用delete。此外,您没有理由调用new或动态分配。您可以简单地自动分配ab也是如此。

B b;
A a;

...
b.add_a_to_b(a); // b stores a copy of `a`.

09-06 16:25