0 c++ destructor memory-leaks memory-management vector
使用list class和push_back的C++内存泄漏
void EMAdd(int n)
{
list<Employee*> em;
for (int i = 1; i <= n; i++)
em.push_back(new Employee());
}
Run Code Online (Sandbox Code Playgroud)
Q1.最后,类列表的析构函数会自动删除em的节点吗?
Q2.但为什么这个功能仍有内存泄漏?
谢谢,谢谢你的回答!
的析构函数Employee是不是叫.你有一个list的指针到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());
}
Run Code Online (Sandbox Code Playgroud)
由于每个元素std::list都已经动态分配,因此指针列表是多余的,本质上为您提供了一组指针指针.