Я помогу многим людям и буду использовать shared_ptr
или увеличить контейнеры указателей.Однако вы можете написать
template <typename Iter>
void delete_pointers(Iter begin, Iter end)
{
for (; begin != end; ++begin) delete *begin;
}
Использование:
std::vector<Foo*> v;
// Initialize Foo objects
delete_pointers(v.rbegin(), v.rend());
Я использую rbegin
и rend
вместо begin
и end
, поскольку иногда люди хотят, чтобыудалить в обратном порядке, в котором они были созданы.
Вы также можете сделать
void destroyFoo(Foo* x) { delete x; }
std::for_each(v.rbegin(), v.rend(), &destroyFoo);
или использовать C ++ 0x lambdas.