Boost logo

Boost Users :

From: Peter Dimov (pdimov_at_[hidden])
Date: 2002-09-12 13:27:18


From: "Mark Snelling" <mark_at_[hidden]>
[...]
>
> std::list<Object*> mylist;
>
> I can call the for_each algorithm on this list using my function above:
>
> std::for_each(mylist.begin(), mylist.end(), &deleter);
>
> and it will delete all of the objects pointed to in the list.
> Is it possible to convert deleter into a templated function:
>
> template<class T> void deleter(T* t)
> {
> delete t;
> }
>
> and pass that into the for_each algorithm?

Yes. You can use

std::for_each(mylist.begin(), mylist.end(), &deleter<Object>);

If this doesn't work, try

#include <boost/checked_delete.hpp>

std::for_each(mylist.begin(), mylist.end(),
boost::checked_deleter<Object>());

An alternative is to convert mylist to

std::list< boost::shared_ptr<Object > mylist;

and let it worry about the lifetime of the objects.


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net