- Czy auto_ptr będzie przestarzałe w przychodzącym standardzie C++?
- Czy należy użyć unique_ptr dla przeniesienia własności zamiast shared_ptr?
- Jeśli unikalna_ptr nie znajduje się w standardzie, czy muszę zamiast tego używać metody shared_ptr?
Odpowiedz
AKTUALIZACJA: Ta odpowiedź została napisana w 2010 roku i zgodnie z przewidywaniami std::auto_ptr
została uznana za przestarzałą. Porada jest całkowicie ważna.
W C++ 0x std::auto_ptr
zostanie wycofany na rzecz std::unique_ptr
. Wybór inteligentnego wskaźnika zależy od Twojego przypadku użycia i Twoich wymagań, z std::unique_ptr
z semantyką ruchu dla pojedynczego właściciela, która może być używana wewnątrz kontenerów (używając semantyki ruchu) i std::shared_ptr
, gdy własność jest współużytkowana.
Powinieneś spróbować użyć inteligentnego wskaźnika, który najlepiej pasuje do sytuacji, wybór właściwego typu wskaźnika zapewnia innym programistom wgląd w swój projekt.
Tak, na dzień dzisiejszy auto_ptr
będzie uznany za przestarzały w C++ 0x, a zamiast tego należy użyć unique_ptr
. Z najnowszego projektu standardu (n3035) sekcja D.9
Szablon klasy
auto_ptr
jest przestarzały. [Uwaga: szablon klasyunique_ptr
(20.9.10) zapewnia lepsze rozwiązanie. -end note]
Do czasu ratyfikacji normy, zawsze jest możliwe, że komisja dokona rewizji tej decyzji, choć wydaje mi się, że jest to mało prawdopodobne w przypadku tej decyzji.
Nie, nie jest przestarzałe. Być może, jeśli C++ 0x zostanie kiedykolwiek zaakceptowany. I będzie realistycznie zawsze wspierany. Nie wierzę, że jakakolwiek przestarzała funkcja została kiedykolwiek usunięta z rzeczywistych implementacji C++.
Nie tylko auto_ptr
jest przestarzała in C++11 (D.10, page 1228), to będzie również usuniętein a future version of C++:
Przyjęte N4190, a właściwie usunięte (nie tylko przestarzałe) kilka archaiczne rzeczy z C++ biblioteki standardowej, w tym
auto_ptr
,bind1st
/bind2nd
,ptr_fun
/mem_fun
/mem_fun_ref
,random_shuffle
i kilka innych. Te są teraz usunięte z wersji standardowej biblioteki C++ 17 i nie będą częścią przyszłego przenośnego C++.
Kolejny dokument na ten temat: Programming Language C++, Library Evolution Working Group - Document N4190, jeśli chcesz uzyskać więcej informacji.
można przekształcić za pomocą kodu auto_ptr
automatycznie, za pomocą unique_ptr
zamiast:
Każdy kod pomocą
auto_ptr
można mechanicznie przekształca się za pomocąunique_ptr
zmove()
włożonej gdyauto_ptr
był „skopiowane”.
+1 dla zauważając, że Nieaktualne funkcje są zachowane –
standardem C++ została uaktualniona jedynie raz, i to było w zasadzie tylko sprostowanie techniczny (tj przymocowane do problemów, które były cytowane). Nic dziwnego, że niczego nie usunął. OTOH, stare funkcje są ostatecznie usuwane z kompilatorów. Na przykład, więcej C++ prawdopodobnie użyło '' niż kiedykolwiek użył 'auto_ptr', ale MS VC++ (dla jednego) już tego nie zapewnia. –
@Jerry iostream.h nigdy nie był częścią żadnego standardu. I jako taki nie jest przestarzały. –