如何从一组中释放内存

时间:2010-09-23 13:59:08

标签: c++ memory-leaks set

我有一个包含指向已分配内存的指针的集合,我使用的是clear方法示例:setname.clear(); 并且该组本身正在被清除和他的指针,但我仍然得到内存泄漏,因为分配的内存由于某种原因保持未清除。

3 个答案:

答案 0 :(得分:7)

std::setclear()方法会删除集合中的元素。但是,在您的情况下,set包含要删除的指针,但它们指向的内存不会被释放。您必须在调用clear()之前手动执行此操作,例如:

struct Deleter
{
  template <typename T>
  void operator () (T *ptr)
  {
     delete ptr;
  }
};

for_each (myset.begin (), myset.end (), Deleter());

Boost中有一个名为Pointer Container的库可解决此问题。

答案 1 :(得分:4)

设置仅清除它自己分配的内容。如果你自己分配一些东西,你必须自己清除它。

答案 2 :(得分:3)

Clear()只删除指针而不是它指向的对象。您需要先迭代每个对象,然后再将其移至delete,或使用类似std::tr1::shared_ptr的内容(也在 Boost 中)。