vector удаляет содержащиеся в нем данные. Поскольку ваш вектор содержит указатели, он удаляет указатели, а не данные, которые они могут или не могут указывать.
Это довольно общее правило на C++, что память освобождается там, где она была выделена. Вектор не выделял, на что указывают ваши указатели, поэтому он не должен отпускать его.
Вы, вероятно, не должны хранить указатели в своем векторе в первую очередь. Во многих случаях, вы бы лучше с чем-то вроде этого:
vector<Foo> vect;
vect.push_back(Foo());
// do stuff
vect.erase(f);
Конечно, это предполагает, что Foo является копируемым, и что его конструктор копирования не слишком дорого, но это позволяет избежать утечек памяти, и вы не Не нужно забывать удалить объект Foo. Другим подходом было бы использование интеллектуальных указателей (таких как Boost's shared_ptr), но вам может не понадобиться семантика указателей вообще, и в этом случае простое решение является лучшим.
Будьте очень осторожны, чтобы использовать boost :: shared_ptr, как указано в этом ответе, вместо auto_ptr. Контейнеры STL не могут использоваться вообще с auto_ptr (причина в том, что объяснение в этом комментарии немного длиннее). – Gorpik 2008-11-11 16:45:45
Хорошо, я принимаю к сведению это. Благодаря ! – Barth 2008-11-12 07:30:39