gpt4 book ai didi

c++ - 释放 std::list 成员

转载 作者:行者123 更新时间:2023-11-30 01:26:49 24 4
gpt4 key购买 nike

我有一个这样定义的列表 std::list<BunnyInfo> bList; ,私有(private),在一个类(class)里面BunnyInfo是一个结构

struct BunnyList::BunnyInfo {
std::string name;
char gender;
std::string color;
unsigned int age : 6; // 0 - 63
bool mutant;
};

列表通过成员函数增长

void BunnyList::add(int count){
bListIter iter;
while(count--){
BunnyInfo *bNew = &fill(*new BunnyInfo());
for(iter = bList.begin(); iter != bList.end(); iter++){
if(iter->age <= bNew->age)
break;
}
bList.insert(iter, *bNew);
}
}

哪里fill()只是一个为结构生成值的函数。我还有一个删除一半列表的成员函数

void BunnyList::reap(){
int toKill = bList.size() / 2;
int find;
bListIter iter;
while(toKill--){
find = rng(0, bList.size()-1);
iter = bList.begin();
for(int i = 0; i < find; i++) // traverse list to the find-th node;
iter++;
delete &(*iter);
bList.erase(iter);
}
}

我的问题是,如何删除列表成员并同时释放通过add() 分配的资源? . delete &(*iter);我认为会产生错误,因为没有它程序运行正常。但只需调用 erase()不释放 BunnyInfo与列表节点关联。

我是 STL 的新手。

最佳答案

自列表声明std::list<BunnyInfo> , 它的 insert复制被插入的对象,erase自动处理拷贝。因此,您不需要也不能使用 delete在那个拷贝上。

由于您的 addnew 分配它不存在的对象 delete (并且不存储在任何数据结构中),add 中存在内存泄漏.

如果要在列表中存储指针,需要将列表声明为std::list<BunnyInfo *>。 .

关于c++ - 释放 std::list 成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9661916/

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