如何正确释放要配对的指针列表?

How to correctly deallocate a list of pointer to pair?

本文关键字:指针 列表 何正确 释放      更新时间:2023-10-16

在我的c ++程序中,我有这个变量:

std::list<std::pair<MyClass,MyClass>*>* myList = 
new std::list<std::pair<MyClass,MyClass> * >() 

如何正确删除此结构的所有信息以避免内存泄漏?我认为在这种模式下做:

list<pair<MyClass,MyClass>*>::iterator it;
for(it = myList->begin(); it != myList->end(); it++){
delete *it;
}
delete myList;

这是一种正确的方法吗?

您当前的代码是正确的,它将删除所有内容。

但是,我建议您不要动态创建列表,因为它已经动态存储其内部数据。然后,使用std::unique_ptr自动删除。

而不是:

std::list<std::pair<MyClass,MyClass> * > * myList=new std::list<std::pair<MyClass,MyClass> * >();

这:

std::list<std::unique_ptr<std::pair<MyClass, MyClass>>> myList;

现在,当您从列表中删除和元素时,std::unique_ptr将为您删除它。

但是,在您的特定示例中,实际上没有必要将元素存储为指针,因为这是一个拥有容器(负责删除其内容(。

所以你可以这样做:

std::list<std::pair<MyClass, MyClass>> myList;

完全忘记指针。

很可能你还需要删除每对的第一个("Stato"(元素,使用类似

delete (*it).first;

这种数据结构有点像噩梦:

std::list<std::pair<MyClass,MyClass> * > *

这是指向列表的指针(指向头节点和尾节点的指针(,其中列表中的节点是指针。 因此,要访问第一个元素,您必须取消引用三个指针。 这对速度和内存使用都不利。

简化:

std::list<std::pair<MyClass,MyClass> >