wektor usuwa zawarte w nim dane. Ponieważ twój wektor zawiera wskaźniki, usuwa jedynie wskaźniki, a nie dane, które mogą lub nie mogą wskazywać.
To dość ogólna zasada w C++, że pamięć jest zwalniana tam, gdzie została przydzielona. Wektor nie przydzielił żadnych wskaźników, więc nie może go zwolnić.
Prawdopodobnie nie powinieneś przechowywać wskaźników w swoim wektorze w pierwszej kolejności. W wielu przypadkach można byłoby lepiej z mniej więcej tak:
vector<Foo> vect;
vect.push_back(Foo());
// do stuff
vect.erase(f);
Oczywiście to zakłada, że Foo jest copyable, a jego konstruktor kopia nie jest zbyt kosztowne, ale pozwala uniknąć wycieków pamięci, a don Trzeba pamiętać, aby usunąć obiekt Foo. Innym podejściem byłoby używanie inteligentnych wskaźników (takich jak Boost's shared_ptr), ale może nie być potrzebna semantyka wskaźnika, w takim przypadku proste rozwiązanie jest najlepsze.
Należy bardzo uważać, aby użyć instrukcji boost :: shared_ptr, zgodnie z instrukcją, zamiast auto_ptr. Kontenerów STL nie można w ogóle używać z auto_ptr (powód jest nieco długi, aby wyjaśnić w tym komentarzu). – Gorpik
Dobrze, zapamiętam to. Dzięki ! – Barth