释放内存以便在c ++中设置

时间:2014-07-31 14:43:55

标签: c++ memory-leaks set

我想从我的套装中释放内存。我试过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(),它会释放所有内存吗?

感谢。

2 个答案:

答案 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();