Для std::list<T*>
используйте:
while(!foo.empty()) delete foo.front(), foo.pop_front();
Для std::vector<T*>
используйте:
while(!bar.empty()) delete bar.back(), bar.pop_back();
Не уверен, почему я взял front
вместо back
для std::list
выше. Я думаю, это чувство, что это быстрее. Но на самом деле оба являются постоянным временем :). В любом случае, оберните это в функцию и получайте удовольствие:
template<typename Container>
void delete_them(Container& c) { while(!c.empty()) delete c.back(), c.pop_back(); }