我有一个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函数中写的代码是否实际上是在释放内存。
答案 0 :(得分:2)
对于multimap,delete(* i).second无法编译,因为你只能通过指针删除对象而int不是指针。
关于擦除功能:就您而言,条目将从容器中删除。分配器可能决定不返回内存,而是将其缓存以供重用,但是,这仅在有限的情况下才有意义。