- Auto_ptr sarà deprecato nello standard C++ in entrata?
- Dovrebbe essere usato unique_ptr per il trasferimento della proprietà invece di shared_ptr?
- Se unique_ptr non è nello standard, allora devo usare invece shared_ptr?
risposta
AGGIORNAMENTO: questa risposta è stata scritta nel 2010 e come anticipato std::auto_ptr
è stata dichiarata obsoleta. Il consiglio è interamente valido.
In C++ 0x std::auto_ptr
sarà deprecato a favore di std::unique_ptr
. La scelta del puntatore intelligente dipenderà dal tuo caso d'uso e dalle tue esigenze, con std::unique_ptr
con semantica di spostamento per proprietà singola che può essere utilizzata all'interno di container (utilizzando la semantica di spostamento) e std::shared_ptr
quando la proprietà è condivisa.
Si dovrebbe provare a utilizzare il puntatore intelligente che si adatta meglio alla situazione, scegliendo il tipo di puntatore corretto fornisce agli altri programmatori una visione approfondita del proprio progetto.
Sì, a partire da oggi auto_ptr
sarà deprecato in C++ 0x e si dovrebbe usare invece unique_ptr
. Dall'ultimo standard di progetto (n3035), sezione D.9
Il modello di classe
auto_ptr
è obsoleto. [Nota: il modello di classeunique_ptr
(20.9.10) offre una soluzione migliore. -end note]
Fino a quando lo standard non sarà ratificato, è sempre possibile che il comitato rivedrà questa decisione, anche se ritengo che sia improbabile per questa decisione.
No, non è deprecato. Potrebbe essere, se C++ 0x viene mai accettato. E sarà realisticamente supportato. Non credo che nessuna caratteristica deprecata sia mai stata sganciata da realizzazioni C++ reali.
Non solo auto_ptr
è deprecato in C++11 (D.10, page 1228), sarà anche eliminatiin a future version of C++:
Adottato N4190, ed effettivamente rimossi (non solo deprecato) parecchie cose arcaici dalla libreria standard C++, tra cui
auto_ptr
,bind1st
/bind2nd
,ptr_fun
/mem_fun
/mem_fun_ref
,random_shuffle
e alcuni altri. Questi sono ora tutti rimossi dalla bozza della libreria standard C++ 17 e non faranno parte del futuro C++ portatile.
Un altro documento a riguardo: Programming Language C++, Library Evolution Working Group - Document N4190, se si desiderano ulteriori informazioni.
è possibile convertire qualsiasi codice utilizzando auto_ptr
automaticamente in base unique_ptr
invece:
Qualsiasi codice utilizzando
auto_ptr
può essere convertita meccanicamente usandounique_ptr
, conmove()
inserita quandoauto_ptr
veniva "copiato".
+1 Per notare che funzioni obsolete vengono mantenute –
serie La C++ è stato aggiornato solo una volta, e che era praticamente una rettifica tecnica (cioè fissati ai problemi che erano stati citati). Non sorprende che non abbia rimosso nulla. OTOH, le vecchie funzionalità finiscono per essere abbandonate dai compilatori. Per esempio, più C++ probabilmente ha usato '' di quanto non sia mai stato usato 'auto_ptr', ma MS VC++ (per uno) non lo fornisce più. –
@Jerry iostream.h non ha mai fatto parte di nessuno standard. E come tale, non è deprecato. –