Код, который вы разместили, не является допустимым C ++.Кроме того, стирание не удаляет выделенные вами объекты, а только стирает содержимое вектора, которые в вашем случае являются указателями.Фактические объекты, которые вы выделили, не удаляются.Вот правильный способ сделать то, что вы хотите:
#include <vector>
#include <algorithm>
class A
{
int x,y,z;
public:
A (int param1, int param2, int param3) :
x (param1), y (param2), z (param3)
{
}
};
struct Deleter
{
template <typename T>
void operator () (T *obj) const
{
delete obj;
}
};
int
main ()
{
std::vector<A*> list;
list.push_back (new A (1, 2, 3));
list.push_back (new A (4, 5, 6));
list.push_back (new A (7, 8, 9));
std::for_each (list.begin (), list.end (), Deleter ());
list.clear ();
}
Вы также можете взглянуть на библиотеку Boost Ptr Container , которая решает эту проблему безопасным и повторно используемым способом.В C ++ 0x есть шаблонный класс std :: unique_ptr, который поддерживает подвижную семантику и может использоваться с контейнерами и алгоритмами STL для автоматической очистки памяти.