Безопасно ли возвращать вектор & lt; auto_ptr & lt; T & gt; & gt ;?

Возможный дубликат:
Почему неправильно использовать std :: auto_ptr<> со стандартными контейнерами?

У меня есть функция для возврата некоторого объекта в указателе, поэтому я использую:

vector <auto_ptr <Object> > func() { ... }

Я хочу знать, безопасно это или нет?

1

Решение

stl любит копировать элементы и использовать временные копии в своих алгоритмах (например, они должны быть «копируемыми» и «назначаемыми»). Хотя это не так для auto_ptr, Назначение одного auto_ptr другому передает право собственности на указатель.

auto_ptr<foo> A = B; Б становится NULL, A является новым владельцем указателя, а B не может использоваться. И когда временный объект становится владельцем, он не возвращает его, и у вас есть вектор повисшего указателя или NULL указатели вместо.

Вы можете использовать умный указатель c ++ 11, или повысить умные указатели, или реализовать его самостоятельно.

0

Другие решения

Других решений пока нет …