如何删除存储在 std::forward_list 中的动态元素

How to delete dynamic elements stored in a std::forward_list

本文关键字:forward list 元素 动态 std 何删除 删除 存储      更新时间:2023-10-16

我在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?

我认为应该发生的是forward_list持有动态分配的 int

不,它不保存动态分配的int。元素的类型是int,当integerList.push_front(*intPtr);时,值将被复制。

另一方面,你在 for 循环中得到内存泄漏,你需要deletenew编辑的内容。

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_ptrstd::shared_ptr .

是的,您必须遍历列表并调用 delete 每个指针元素。