我在C ++中使用std :: forward_list来存储动态分配的元素。我想知道“删除”列表中的元素或释放内存的正确方法是什么。
std::forward_list<int> integerList;
for (int i = 0; i < 5; i++) {
int* intPtr = new int(i);
integerList.push_front(*intPtr);
}
执行此代码后,我认为应该发生的事情是forward_list包含动态分配的int。现在,我将如何正确地调用删除呢?我注意到forward_list容器有一个clear()函数,但是在每个节点的所有元素上调用delete吗?
答案 0 :(得分:1)
我认为应该发生的事情是forward_list包含一个动态分配的int
不,它没有动态分配int
。元素的类型为int
,当integerList.push_front(*intPtr);
时,将复制该值。
另一方面,在for循环中出现内存泄漏,您需要delete
new
编辑的内容。
for (int i = 0; i < 5; i++) {
int* intPtr = new int(i);
integerList.push_front(*intPtr);
delete intPtr;
}
如果要保存动态分配的元素,则应将元素类型声明为指针,并最后自行删除元素。
std::forward_list<int*> integerList;
for (int i = 0; i < 5; i++) {
int* intPtr = new int(i);
integerList.push_front(intPtr);
}
...
for (auto e : integerList) {
delete e;
}
您可以使用智能指针来避免此类内存管理,例如std::unique_ptr
或std::shared_ptr
。
答案 1 :(得分:-1)
是的,你必须遍历列表并调用delete每个指针元素。