C++内存泄漏修复

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)

问题是:

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

  2. 会的析构函数Base的派生,或不析构函数之前被调用?

  3. 请问fooesvertor被自动删除,同时删除Base或我必须手动删除类的所有成员?

Luc*_*ore 7

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)

你应该有一个deletedelete[]每一个newnew[]分别.

更好的替代方法是使用智能指针.