如何正确释放要配对的指针列表?
How to correctly deallocate a list of pointer to pair?
在我的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> >
相关文章:
- 为什么这个 std::queue/指向结构的指针列表直到 List.Size() == 0 才释放内存?
- 什么更好?返回对象指针列表?或返回指向对象列表的指针?
- 如何将共享指针列表传递到pybind11中的c++对象
- C++:如何初始化包含具有给定键的指针列表的映射
- 使用继承的指针列表复制构造函数或重载运算符=
- 我应该如何在工厂类中存储弱指针列表?
- Qt单元测试:指针列表上的QCOMPARE函数
- 如何正确释放要配对的指针列表?
- 如何在 c++ 上对指针列表进行排序
- 从地图复制到指针列表
- 我对C 中共享指针列表进行排序的功能未完成类型
- const_iterator引用的指针列表
- 在 c++ 中生成字符串到 std::指针列表的映射
- 访问链表中的结构(带有指向其子实现的指针列表的树)
- 有没有办法使用基于范围的迭代器来迭代对指针列表值的引用?
- 使用迭代器指针 (C++) 从对象指针列表中删除元素
- 无法列出定制类型的指针列表
- 创建指针列表的正确范例是什么
- 如何将指向指针列表的私有指针作为 const 返回
- C++填充指向指针**列表的指针,该列表指向指针地址