C++ C++;使用list类和push_返回导致内存泄漏
使用list类和push_返回的C++内存泄漏C++ C++;使用list类和push_返回导致内存泄漏,c++,memory-management,vector,memory-leaks,destructor,C++,Memory Management,Vector,Memory Leaks,Destructor,使用list类和push_返回的C++内存泄漏 void EMAdd(int n) { list<Employee*> em; for (int i = 1; i <= n; i++) em.push_back(new Employee()); } void EMAdd(int n) { 列出em; 对于(int i=1;i不调用Employee的析构函数。您有一个list指向Employee对象的指针,而不是Employee对象的列表。当调用该列表的
void EMAdd(int n)
{
list<Employee*> em;
for (int i = 1; i <= n; i++)
em.push_back(new Employee());
}
void EMAdd(int n)
{
列出em;
对于(int i=1;i不调用Employee
的析构函数。您有一个list
指向Employee
对象的指针,而不是Employee
对象的列表。当调用该列表的析构函数时,它将销毁指向Employee
对象的指针,但不会销毁它们指向您创建的对象thnew Employee()
。它们仍将在内存中,但当列表被销毁时,对它们的唯一引用将丢失,从而泄漏内存
记住,每次调用new
都必须在某个地方有一个匹配的调用delete
。但是,最好不要使用指针,直接使用员工
对象列表
void EMAdd(int n)
{
list<Employee> em;
for (int i = 1; i <= n; i++)
em.push_back(Employee());
}
void EMAdd(int n)
{
列出em;
对于(int i=1;i您应该有一个列表
的唯一的\u ptr
s,以便在销毁时释放内存:
std::list<std::unique_ptr<Employee>> em;
std::列出em;
但是正如David Brown所说,你不应该一开始就使用指针。这是可行的,但是每个列表元素都已经独立地动态分配,所以一个unique_ptr
的列表有点多余。@DavidBrown不介意我理解你的意思。他不应该一开始就使用指针。相关: