gpt4 book ai didi

C++内存泄漏修复

转载 作者:太空宇宙 更新时间:2023-11-04 14:45:23 25 4
gpt4 key购买 nike

我的一个伙伴告诉我,这段代码有内存泄漏

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();
};

};

问题是:

  1. 这是正确的内存泄漏修复吗?

  2. Base 的析构函数是否会在 Derived 的析构函数之前被调用?

  3. 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];
};

对于每个 newnew[],你应该分别有一个 deletedelete[]

一个更好的替代方案是使用智能指针。

关于C++内存泄漏修复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12246060/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com