- Будет ли auto_ptr устаревшим на входящем стандарте С++?
- Если unique_ptr используется для передачи прав собственности вместо shared_ptr?
- Если unique_ptr не соответствует стандарту, то нужно ли использовать shared_ptr вместо этого?
Является ли auto_ptr устаревшим?
Ответ 1
ОБНОВЛЕНИЕ: этот ответ был написан в 2010 году, и как ожидалось, std::auto_ptr
устарел. Совет полностью действителен.
В С++ 0x std::auto_ptr
будет устаревать в пользу std::unique_ptr
. Выбор умного указателя будет зависеть от вашего прецедента и ваших требований с помощью std::unique_ptr
с семантикой перемещения для единого владения, которая может использоваться внутри контейнеров (с использованием семантики перемещения) и std::shared_ptr
, когда собственность разделяется.
Вам следует попытаться использовать умный указатель, который наилучшим образом соответствует ситуации, выбрав правильный тип указателя, чтобы другие программисты поняли ваш дизайн.
Ответ 2
Да, на сегодняшний день auto_ptr
будет устаревать в С++ 0x, и вместо этого вы должны использовать unique_ptr
. Из последнего проекта стандарта (n3035), раздел D.9
Шаблон класса
auto_ptr
устарел. [Примечание. Шаблон классаunique_ptr
(20.9.10) обеспечивает лучшее решение. -end note]
До тех пор, пока стандарт не будет ратифицирован, всегда возможно, что комитет пересмотрит это решение, хотя я считаю, что маловероятно для этого решения.
Ответ 3
Не только auto_ptr
устарел в С++ 11 (D.10, страница 1228), он также будет удален в будущей версии С++:
Принял N4190 и фактически удалил (не просто устарел) несколько архаичных вещей из стандартной библиотеки С++, включая
auto_ptr
,bind1st
/bind2nd
,ptr_fun
/mem_fun
/mem_fun_ref
,random_shuffle
и еще несколько. Теперь все они удалены из стандартной стандартной библиотеки С++ 17 и не будут частью будущего портативного С++.
Другой документ об этом: Язык программирования С++, Рабочая группа по эволюции библиотек - Документ N4190, если вы хотите получить дополнительную информацию.
Вы можете конвертировать любой код с помощью auto_ptr
automaticaly, используя unique_ptr
вместо:
Любой код с использованием
auto_ptr
может быть механически преобразован в использованиеunique_ptr
, причемmove()
вставлен всякий раз, когдаauto_ptr
"копируется".
Ответ 4
Нет, он не устарел. Это может быть, если С++ 0x когда-либо принимается. И это будет реально поддерживать. Я не верю, что любая устаревшая функция когда-либо была удалена из реализаций реализаций на С++.