我的一个伙伴告诉我,这段代码有内存泄漏
Base
{
public:
vector<Foo*> fooes;
};
Derived : public Base
{
public:
Derived ( )
{
for ( int i = 0 ; i < 10 ; i++ )
{
this.fooes.push_back ( new Foo() );
}
};
};
但是他很忙,帮不了我,所以我问你,内存泄漏在哪里?我该如何解决?
据我了解,内存泄漏是因为我没有删除由 new Foo()
创建的对象,所以我可以向 Base
添加一个析构函数,然后清除 fooes
vector ,对吗?
Base
{
public:
vector<Foo*> fooes;
~Base ( )
{
this->fooes.clear();
};
};
问题是:
这是正确的内存泄漏修复吗?
Base
的析构函数是否会在 Derived 的析构函数之前被调用?fooes
vertor 是否会在删除Base
时自动删除,还是我必须手动删除该类的所有成员?
最佳答案
1) Is this a correct memory leak fix?
不,您必须遍历元素并手动删除
它们。
2) Will the destructor of Base be called before the destructor of Derived, or not?
否(假设您要删除一个 Derived
对象)。
3) Will the fooes vector be deleted automatically while deleting Base or I must delete all members of the class manually?
是与否。 vector 本身将被删除,因为它是自动管理的,其成员不会:
~Base ( )
{
for ( size_t i = 0 ; i < fooes.size() ; i++ )
delete fooes[i];
};
对于每个 new
和 new[]
,你应该分别有一个 delete
和 delete[]
。
一个更好的替代方案是使用智能指针。
关于C++内存泄漏修复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12246060/