动态分配的std :: vector似乎有内存泄漏

时间:2012-04-19 13:17:52

标签: c++ stl memory-leaks vector

感谢大家,在整个项目中再次检查后,真正的问题是缺少虚拟目标...导致内存泄漏......

#include "stdafx.h"
#include <vector>

class VecContainerParent
{
public:
    VecContainerParent(){};

没有这一行:

    virtual ~VecContainerParent(){};

导致内存泄漏

};

class VecContainerChild : public VecContainerParent
{
public:
    VecContainerChild(){};

    //virtual ~VecContainerChild(){};
private:
    std::vector<int> vec;
};

////////// WITH MEMORY LEAK ///////////////


int _tmain(int argc, _TCHAR* argv[])
{
    VecContainerParent *a;
    while(true)
    {
        a = new VecContainerChild();
        delete a;
    }
} 

/////原帖////////// 我在类中使用向量时出现内存泄漏问题,然后将此对象与new&amp;删除。 似乎类中的向量不释放内存。 为了测试这个,我在任务管理器中看到过程的内存急剧增加。

请参阅以下示例:

class VecContainer
{
public:
       VecContainer(){};
private:
       std::vector<int> vec;
}
  1. 内存泄漏:

    int main()
    {
        VecContainer *a;
        while(true)
        {
            a = new VecContainer();
            delete a;
        }
    }
    
  2. 好(因为不使用ptr):

    int main()
    {
        while(true)
        {
            VecContainer a;
        }
    }
    

1 个答案:

答案 0 :(得分:3)

这是典型的。当你

   a = new VecContainerChild();
    delete a;

通过指向其基类子对象的指针删除对象,调用未定义的行为,除非基类具有虚拟析构函数。基本上,在这种情况下,孩子的析构函数不会运行。

This might be a question to study further.