gpt4 book ai didi

c++ - 如何正确地释放指向对的指针列表?

转载 作者:行者123 更新时间:2023-11-30 05:00:48 24 4
gpt4 key购买 nike

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

并且完全忘记指针。

关于c++ - 如何正确地释放指向对的指针列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50566346/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com