std :: set 's clear () метод удаляет элементы из набора. Однако в вашем случае набор содержит указатели, которые удаляются, но память, на которую они указывают, не освобождается. Вы должны сделать это вручную перед вызовом clear()
, например:
struct Deleter
{
template <typename T>
void operator () (T *ptr)
{
delete ptr;
}
};
for_each (myset.begin (), myset.end (), Deleter());
В Boost имеется библиотека Pointer Container , которая решает эту проблему.