vector удаляет содержащиеся в нем данные. Поскольку ваш вектор содержит указатели, он удаляет только указатели, а не данные, на которые они могут или не могут указывать.
Это довольно общее правило в C ++, когда память выделяется там, где она была выделена. Вектор не выделил то, на что указывают ваши указатели, поэтому он не должен освобождать его.
Вы, вероятно, не должны хранить указатели в вашем векторе.
Во многих случаях вам будет лучше что-то вроде этого:
vector<Foo> vect;
vect.push_back(Foo());
// do stuff
vect.erase(f);
Конечно, это предполагает, что Foo является копируемым, и что его конструктор копирования не слишком дорогой, но он позволяет избежать утечек памяти, и вам не нужно забывать удалять объект Foo. Другой подход заключается в использовании интеллектуальных указателей (таких как Boost's shared_ptr), но вам может вообще не понадобиться семантика указателей, и в этом случае простое решение является лучшим.