vectơ xóa dữ liệu chứa trong đó. Vì vectơ của bạn chứa con trỏ, nó chỉ xóa con trỏ, chứ không xóa dữ liệu mà chúng có thể hoặc không trỏ tới.
Đó là một quy tắc khá chung trong C++ rằng bộ nhớ được phát hành ở nơi được cấp phát. Vectơ không phân bổ bất cứ điều gì con trỏ trỏ đến, vì vậy nó không được giải phóng nó.
Có thể bạn không nên lưu trữ con trỏ trong vectơ của mình ngay từ đầu. Trong nhiều trường hợp, bạn sẽ được tốt hơn off với một cái gì đó như thế này:
vector<Foo> vect;
vect.push_back(Foo());
// do stuff
vect.erase(f);
Tất nhiên điều này giả định rằng Foo là copyable, và đó copy constructor của nó không phải là quá đắt, nhưng nó tránh rò rỉ bộ nhớ, và bạn don không phải nhớ để xóa đối tượng Foo. Một cách tiếp cận khác là sử dụng con trỏ thông minh (chẳng hạn như shared_ptr của Boost), nhưng bạn có thể không cần ngữ nghĩa của con trỏ, trong trường hợp đó, giải pháp đơn giản là giải pháp tốt nhất.
Hãy cẩn thận khi sử dụng tăng :: shared_ptr, vì câu trả lời này chỉ thị thay vì auto_ptr. STL container không thể được sử dụng ở tất cả với auto_ptr (lý do là một chút dài để giải thích trong bình luận này). – Gorpik
Ok, tôi lưu ý điều này. Cảm ơn ! – Barth