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
或动态分配。您可以简单地自动分配a
。 b
也是如此。
B b;
A a;
...
b.add_a_to_b(a); // b stores a copy of `a`.