Differenza tra ATL CAutoPtr e STL std :: auto_ptr?
-
22-08-2019 - |
Domanda
Sto scrivendo del codice in MFC e voglio utilizzare i puntatori auto. Ho incontrato due classi diverse che sembrano fare la stessa cosa:? CAutoPtr
e std::auto_ptr
Quali sono i pensieri della gente circa i due implementazioni diverse
Inoltre, so che c'è std::tr1::shared_ptr
. C'è una shared_ptr
simile che è in ATL / MFC?
Soluzione
Sia CAutoPtr
e auto_ptr
ti danno la semantica puntatore intelligente compreso il trasferimento della semantica di proprietà. CAutoPtr
è una classe ATL - costruito utilizzando COM. Si tratta di un'estensione non standard per un particolare sistema operativo. auto_ptr
invece è standard ++ C. Se si desidera utilizzare un contenitore di tali oggetti è necessario utilizzare CAutoPtrArray
o CAutoPtrList
.
Un punto importante da notare è che c'è qualcosa chiamato auto_ptr_ref
che consente di tornare auto_ptr
s come valore di ritorno. Non esiste una cosa del genere con CAutoPtr
.
auto_ptr
è deprecato in C ++ 0x. Utilizzare unique_ptr
se si deve:. Si possono utilizzare in contenitori Move-consapevoli e prendere un po 'di sicurezza da non sicuri mosse implicite di L-valori anche
Altri suggerimenti
La cosa più vicina a shared_ptr in ATL / MFC è CComPtr. E 'pensato per essere utilizzato su oggetti COM, ma può essere utilizzato su qualsiasi classe che include metodi di conteggio di riferimento AddRef / Release.
CAutoPtr è ATL specifica.
std: auto_ptr e CAutoPtr entrambi non forniscono il conteggio dei riferimenti. Sembra che entrambi hanno stessa funzionalità. testo
Credo che non v'è alcuna shared_ptr in ATL / MFC. shared_ptr è implementato in libreria Boost.