Кроме того, есть ли случай, когда мы не захотим удалить элемент при его удалении?
Как вектор мог узнать, если кому-то еще нужны объекты, на которые он указывает?Как он мог даже знать, что пуанты хранятся в куче?Вполне возможно иметь указатели на статические или автоматические объекты в векторе или даже висячие указатели.
C ++ 0x позволяет вам выразить, что вектор должен владеть пуантами:
std::vector<std::unique_ptr<foo>> vec;
Теперь вам не нужно ничего удалять вручную.Стирая уникальные указатели, удаляются и их соответствующие указатели.Контейнеры собственных указателей очень редки в современном C ++.
Если у вас нет компилятора C ++ 0x, вы можете использовать вместо него std::vector<boost::shared_ptr<foo> >
или boost::ptr_vector<foo>
.Современные компиляторы поставляют shared_ptr
в пространство имен std::tr1
или std
, если вы #include <memory>
.