Алгоритм STL для удаления всех объектов в контейнере?
Есть ли утилита / алгоритм STL, чтобы сделать delete *the_object_iterator;
на всех объектах? Так, чтобы я смог clear()
безопасно? Контейнер STL является set
и объекты являются указателями на классы C++, созданные с new
,
Повышение кажется лучшим решением. Моя цель состояла в том, чтобы избежать копирования в не копируемых классах.
3 ответа
Решение
Насколько я знаю, не существует стандартного алгоритма удаления всех объектов. Тем не менее, вы можете создать один легко:
template< typename T > invoke_delete( T* ptr ){ delete ptr; }
std::for_each( set.begin(), set.end(), &invoke_delete< set_value_type > );
Используйте умный указатель для хранения указателей класса
std::set<std::unique_ptr<MyClass> > mySet;
Контейнеры повышения указателя - путь.
Они не только хранят динамически размещенные объекты. Но объекты доступны как ссылки, что значительно упрощает использование стандартных алгоритмов объекта.
boost::ptr_set<MyClass> setData;
setData.insert(new MyClass);