1

在我的 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;

这是一个正确的方法吗?

4

3 回答 3

1

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

但是,我建议您不要动态创建列表,因为它已经动态存储了内部数据。然后,用于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;

并且完全忘记指针。

于 2018-05-28T12:25:16.463 回答
0

很可能您还需要删除每对的第一个(“Stato”)元素,使用类似的调用

delete (*it).first;
于 2018-05-28T12:26:14.897 回答
0

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

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

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

简化:

std::list<std::pair<MyClass,MyClass> >
于 2018-05-28T12:29:58.277 回答