Возможный дубликат:
Почему неправильно использовать std :: auto_ptr<> со стандартными контейнерами?
У меня есть функция для возврата некоторого объекта в указателе, поэтому я использую:
vector <auto_ptr <Object> > func() { ... }
Я хочу знать, безопасно это или нет?
stl любит копировать элементы и использовать временные копии в своих алгоритмах (например, они должны быть «копируемыми» и «назначаемыми»). Хотя это не так для auto_ptr
, Назначение одного auto_ptr
другому передает право собственности на указатель.
auto_ptr<foo> A = B;
Б становится NULL
, A является новым владельцем указателя, а B не может использоваться. И когда временный объект становится владельцем, он не возвращает его, и у вас есть вектор повисшего указателя или NULL
указатели вместо.
Вы можете использовать умный указатель c ++ 11, или повысить умные указатели, или реализовать его самостоятельно.
Других решений пока нет …