我有一个包含指向已分配内存的指针的集合,我使用的是clear方法示例:setname.clear();
并且该组本身正在被清除和他的指针,但我仍然得到内存泄漏,因为分配的内存由于某种原因保持未清除。
答案 0 :(得分:7)
std::set的clear()方法会删除集合中的元素。但是,在您的情况下,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 中)。