gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 03:02:20 26 4
gpt4 key购买 nike

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

#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;
}
}

/////原帖//////////我有一个内存泄漏的问题,当在类内部使用 vector 时,然后将这个对象与 new & delete 一起使用。类中的 vector 似乎没有释放内存。为了对此进行测试,我在任务管理器中看到进程的内存急剧增加。

请看下面的例子:

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

最佳答案

这是典型的。当你

   a = new VecContainerChild();
delete a;

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

This might be a question to study further.

关于c++ - 动态分配的 std::vector 似乎有内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10228959/

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