这个代码是否可以为MULTIMAP分配空闲内存?

时间:2012-03-12 10:21:50

标签: c++ c++11

我有一个multimap和一个指向multimap的指针。说我有多图 typedef multimap<class1, class2*> LO_Index;。我还有LO_Index * _index;哪些指向multimap。要释放为此maop分配的所有内存空间,我将执行以下操作。我有一个Reset函数,它执行以下操作以释放为此multimap分配的所有内存空间:

    for ( LO_Index ::iterator i = _index->begin(); i != _index->end(); i++ )
            delete (*i).second;

    // Delete all entries in the index
    _index->erase( _index->begin(), _index->end() );

我在set的情况下读到的是setname.clear()实际上并没有释放所有分配的空间。但是在http://www.cplusplus.com/reference/stl/multimap/erase/中,我发现了擦除

  

这有效地减少了容器大小的元素数量   删除,调用每个元素的析构函数。

所以我猜它实际上会释放分配的空间。但是我想确认在我的reset函数中写的代码是否实际上是在释放内存。

1 个答案:

答案 0 :(得分:2)

对于multimap,delete(* i).second无法编译,因为你只能通过指针删除对象而int不是指针。

关于擦除功能:就您而言,条目将从容器中删除。分配器可能决定不返回内存,而是将其缓存以供重用,但是,这仅在有限的情况下才有意义。