Алгоритм 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);
Другие вопросы по тегам