在我的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;
这是一种正确的方法吗?
答案 0 :(得分: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;
完全忘记指针。
答案 1 :(得分:0)
很可能你还需要删除每对中的第一个(&#34; Stato&#34;)元素,使用类似
的调用delete (*it).first;
答案 2 :(得分:0)
这种数据结构有点像噩梦:
std::list<std::pair<MyClass,MyClass> * > *
这是一个指向列表的指针(指向头尾节点的指针),其中列表中的节点是指针。因此,要访问第一个元素,您必须取消引用三个指针。这对速度和内存使用都不利。
简化:
std::list<std::pair<MyClass,MyClass> >