Алгоритм STL для удаления всех объектов в контейнере? - PullRequest
3 голосов
/ 30 сентября 2011

Есть ли утилита / алгоритм STL для выполнения delete *the_object_iterator; на всех объектах? Так что я могу clear() безопасно? Контейнер STL представляет собой set, а объекты являются указателями на классы C ++, созданные с помощью new.

Повышение представляется лучшим решением. Моя цель состояла в том, чтобы избежать копирования в классах, которые нельзя копировать.

Ответы [ 3 ]

16 голосов
/ 30 сентября 2011

Используйте умный указатель для хранения указателей класса

std::set<std::unique_ptr<MyClass> > mySet;
9 голосов
/ 30 сентября 2011

Насколько я знаю, стандартного алгоритма удаления всех объектов не существует. Тем не менее, вы можете создать один легко:

template< typename T > invoke_delete( T* ptr ){ delete ptr; }

std::for_each( set.begin(), set.end(), &invoke_delete< set_value_type > );
7 голосов
/ 30 сентября 2011

Контейнеры повышающих указателей - это путь.

Мало того, что они хранят динамически размещенные объекты.Но объекты доступны как ссылки, что значительно упрощает использование стандартных алгоритмов для объекта.

boost::ptr_set<MyClass>   setData;

setData.insert(new MyClass);
...