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?

È stato utile?

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_ptrs 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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top