- Чи буде застарілим auto_ptr у вхідному стандарті C ++?
- Чи слід для передачі права власності використовувати замість shared_ptr унікальний_ptr?
- Якщо unique_ptr відсутній у стандарті, то чи потрібно мені замість цього використовувати shared_ptr?
Відповіді:
ОНОВЛЕННЯ: Ця відповідь була написана в 2010 році, і, як очікувалося std::auto_ptr
, застаріла. Порада цілком слушна.
У C ++ 0x std::auto_ptr
буде припинено на користь std::unique_ptr
. Вибір розумного вказівника буде залежати від вашого варіанту використання та ваших вимог, із std::unique_ptr
семантикою переміщення для одного власника, яка може бути використана всередині контейнерів (із використанням семантики переміщення), і std::shared_ptr
коли право власності є спільним.
Вам слід спробувати використовувати розумний вказівник, який найкраще відповідає ситуації, вибір правильного типу вказівника надає іншим програмістам розуміння вашого дизайну.
Так, на сьогоднішній день auto_ptr
буде застарілим у C ++ 0x, і unique_ptr
замість цього слід використовувати . З останнього проекту стандарту (n3035), розділ D.9
Шаблон класу
auto_ptr
застарілий. [Примітка: Шаблон класуunique_ptr
(20.9.10) пропонує краще рішення. —Кінець примітки]
Поки стандарт не буде затверджений, завжди можливо, що комітет перегляне це рішення, хоча, на мою думку, це малоймовірне рішення.
У C ++ 11 (D.10, сторінка 1228) не лише auto_ptr
застаріло , але також буде видалено в наступній версії C ++ :
Прийнято N4190, а на самому ділі видалений (не просто застарілі) кілька архаїчних речей зі стандартної бібліотеки С ++, в тому числі
auto_ptr
,bind1st
/bind2nd
,ptr_fun
/mem_fun
/mem_fun_ref
,random_shuffle
і дещо більше. Тепер усі вони вилучені із проекту стандартної бібліотеки C ++ 17 і не будуть частиною майбутньої портативної C ++.
Інший документ про це: Мова програмування C ++, Робоча група з розвитку бібліотеки - Документ N4190 , якщо вам потрібна додаткова інформація.
Ви можете автоматично перетворити будь-який код auto_ptr
, використовуючи unique_ptr
замість цього:
Будь-який код, що використовує,
auto_ptr
може бути механічно перетворений у використовуючиunique_ptr
, зmove()
вставкою, коли бauto_ptr
він був "скопійований".
Ні, це не застаріло. Це може бути, якщо C ++ 0x коли-небудь буде прийнято. І це реально завжди буде підтримано. Я не вірю, що жодна застаріла функція ніколи не випадала із реальних реалізацій C ++.
auto_ptr
є частиною стандарту, але використовується значно менше. З практичної точки зору, його видалення матиме значно менший вплив.
<iostream.h>
ніж коли-небудь використано C ++auto_ptr
, але MS VC ++ (для одного) більше не надає.