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

时间:2015-11-13 17:02:44

标签: c++

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

2 个答案:

答案 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_ptrstd::shared_ptr

答案 1 :(得分:-1)

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