【发布时间】:2015-11-13 17:02:44
【问题描述】:
我在 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。现在,我将如何正确调用 delete 呢?我注意到 forward_list 容器有一个 clear() 函数,但它会在每个节点中的所有元素上调用 delete 吗?
【问题讨论】:
-
I'm using a std::forward_list in C++ to store dynamically allocated elements.嗯,不,你根本没有这样做。您正在存储这些元素的 副本 并泄露原始元素。 -
@Borgleader 不错。我错过了。
-
谢谢大家,这是有道理的。那么删除原件并确保不泄漏的正确方法是什么?我应该添加删除 intPtr;在 for 循环的最后一行?
-
添加删除将修复泄漏,但您不需要首先更新 int。
integerList.push_front(i);可以工作 just as well -
是的,我明白,我的问题有点复杂,我确实需要“新”,所以我只是想知道应该如何处理。谢谢!
标签: c++