Подтвердить что ты не робот

Должен ли я прекратить использование auto_ptr?

Недавно я начал оценивать std::auto_ptr, и теперь я прочитал, что это будет deprecated. Я начал использовать его для двух ситуаций:

  • Возвращаемое значение factory
  • Передача прав на передачу информации

Примеры:

// Exception safe and makes it clear that the caller has ownership.
std::auto_ptr<Component> ComponentFactory::Create() { ... }

// The receiving method/function takes ownership of the pointer. Zero ambiguity.
void setValue(std::auto_ptr<Value> inValue);

Несмотря на проблематичную семантику копирования, я нахожу auto_ptr полезным. И, похоже, альтернативы для приведенных выше примеров не существует.

Должен ли я продолжать использовать его, а затем переключаться на std::unique_ptr? Или его следует избегать?

4b9b3361

Ответ 1

Это очень полезно, несмотря на недостатки, что я настоятельно рекомендую просто продолжать использовать его и переключиться на unique_ptr, когда он станет доступен.

::std::unique_ptr требуется компилятор, который поддерживает ссылки rvalue, которые являются частью стандартного проекта С++ 0x, и для этого потребуется очень широкая поддержка. И пока доступны ссылки rvalue, ::std::auto_ptr - лучшее, что вы можете сделать.

Наличие в коде кода ::std::auto_ptr и ::std::unique_ptr может смутить некоторых людей. Но вы должны иметь возможность искать и заменять ::std::unique_ptr, когда вы решите изменить его. Если вы это сделаете, вы можете получить ошибки компилятора, но их легко устранить. Более высокий ответ на этот вопрос о замене ::std::auto_ptr на ::std::unique_tr имеет более подробную информацию.

Ответ 2

устаревшее не означает, что он уходит, просто будет лучшая альтернатива.

Я бы посоветовал использовать его в текущем коде, но используя новую альтернативу для нового кода (новые программы или модули, а не небольшие изменения в текущем коде). Консистенция важна

Ответ 3

Я предлагаю вам использовать интеллектуальные указатели boost.