我想从我的套装中释放内存。我试过how to free memory from a set帖子,但它对我不起作用。
这是我的代码:
#include <iostream>
#include <set>
using namespace std;
struct Deleter
{
void operator () (int *ptr)
{
delete ptr;
}
};
int main()
{
set<int> myset;
myset.insert(100);
myset.insert(1);
myset.insert(12);
myset.insert(988);
set<int>::iterator it;
for (it = myset.begin() ; it!=myset.end() ; it++)
{
Deleter(it);
cout<<"size of set: "<<myset.size()<<endl;
}
return 0;
}
输出结果为:
size of set: 4
size of set: 4
size of set: 4
size of set: 4
虽然set的大小仍为4,但此代码如何释放内存?
它由Deleter(it)
删除了什么?
如果我最后使用myset.clear()
,它会释放所有内存吗?
感谢。
答案 0 :(得分:1)
删除一词将用于使用 new 在堆上动态分配的数据。
如果要从stl集中删除某些内容,可以使用erase function执行此操作。
如果您的set包含指向动态分配对象的指针,那么您可以在它们上调用delete,但您的set仍然包含这些指针。你仍然需要从你的集合中删除指针。
答案 1 :(得分:1)
在C ++中,您使用delete来释放在新建对象时分配的内存。当你新建一个对象时,你说你将为它管理内存。
在这种情况下,你不是新手,你只需要在集合中插入一个元素。要从集合中删除项目,请使用擦除方法。
它过载了几种不同的方式,因此,如果你想通过iter或value删除它,你会传递不同的参数。 Here是设置擦除的好参考。
myset.erase(100);
myset.erase(100);
myset.erase(12);
myset.erase(988);
此外,如果要删除集合中的所有内容,只需调用clear()方法。
myset.clear();