Kol*_*nya 0 c++ memory memory-leaks derived-class
我的一个伙伴告诉我,我的代码中有内存泄漏
Base
{
public:
vector<Foo*> fooes;
};
Derived : public Base
{
public:
Derived ( )
{
for ( int i = 0 ; i < 10 ; i++ )
{
this.fooes.push_back ( new Foo() );
}
};
};
Run Code Online (Sandbox Code Playgroud)
但他是一个非常忙碌的人,他无法帮助我,所以我问你,内存泄漏在哪里?我该如何解决?据我了解,内存泄漏是我不删除创建的对象new Foo()
,所以我只能添加一个析构函数Base
,并清除fooes
向量,对吧?
Base
{
public:
vector<Foo*> fooes;
~Base ( )
{
this->fooes.clear();
};
};
Run Code Online (Sandbox Code Playgroud)
问题是:
这是正确的内存泄漏修复吗?
会的析构函数Base
的派生,或不析构函数之前被调用?
请问fooes
vertor被自动删除,同时删除Base
或我必须手动删除类的所有成员?
1)这是一个正确的内存泄漏修复?
不,你必须遍历元素并手动完成delete
它们.
2)在Derived的析构函数之前是否会调用Base的析构函数?
否(假设您正在删除Derived
对象).
3)删除Base时是否会自动删除foos vector,或者我必须手动删除该类的所有成员?
是和否.矢量本身将被删除,因为它是自动管理的,其成员不会:
~Base ( )
{
for ( size_t i = 0 ; i < fooes.size() ; i++ )
delete fooes[i];
};
Run Code Online (Sandbox Code Playgroud)
你应该有一个delete
和delete[]
每一个new
和new[]
分别.
更好的替代方法是使用智能指针.
归档时间: |
|
查看次数: |
249 次 |
最近记录: |