gpt4 book ai didi

使用列表类和 push_back 的 C++ 内存泄漏

转载 作者:太空宇宙 更新时间:2023-11-04 15:05:31 26 4
gpt4 key购买 nike

使用列表类和 push_back 的 C++ 内存泄漏

void EMAdd(int n)
{
list<Employee*> em;
for (int i = 1; i <= n; i++)
em.push_back(new Employee());
}

Q1。最后类列表的析构函数自动删除em的节点?

Q2。但是为什么这个函数还是有内存泄漏呢?

谢谢,非常感谢您的回答!

最佳答案

Employee 的析构函数被调用。您有一个指向Employee 对象的指针 列表,而不是Employee 对象的列表。当调用列表的析构函数时,它将销毁指向 Employee 对象的指针,但不会销毁它们指向的您使用 new Employee() 创建的对象。它们仍将在内存中,但当列表被销毁时,对它们的唯一引用将丢失,从而泄漏内存。

请记住,对 new 的每次调用都必须在某处匹配对 delete 的调用。但是,最好不要使用指针,直接使用 Employee 对象列表。

void EMAdd(int n)
{
list<Employee> em;
for (int i = 1; i <= n; i++)
em.push_back(Employee());
}

由于 std::list 中的每个元素都已动态分配,因此指针列表是多余的,本质上为您提供了一组指向指针的指针。

关于使用列表类和 push_back 的 C++ 内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16205080/

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