使用列表类和 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/