Di tanto in tanto, per i momenti fugaci, penso auto_ptr è cool. Ma la maggior parte delle volte riconosco che ci sono tecniche molto più semplici che la rendono irrilevante. Ad esempio, se voglio che un oggetto venga liberato automaticamente, anche se viene lanciata un'eccezione, potrei creare nuovamente l'oggetto e assegnarlo a un auto_ptr. Molto bello! Ma avrei potuto creare più facilmente il mio oggetto come variabile locale e lasciare che lo stack si occupasse di esso (duh!).Lasciar andare auto_ptr
Così non ero troppo sorpreso quando ho scoperto google C++ coding standards vieta l'uso di auto_ptr. Google afferma che deve essere usato scoped_ptr (se è necessario un puntatore intelligente).
Mi piacerebbe sapere se qualcuno, contrariamente alla mia esperienza, può dare una solida ragione/i di quando auto_ptr è la cosa migliore o più semplice da usare. In caso contrario, suppongo che ne escluderò l'utilizzo da solo (seguendo la guida di Google).
aggiornamento: Per coloro che hanno espresso preoccupazione, no non sto adottando gli standard di Google. Ad esempio, contro il consiglio di google, sono d'accordo che la gestione delle eccezioni debba essere attivata. Mi piace anche l'utilizzo di macro di preprocessore, come ad esempio il printable enum creato. È solo l'argomento auto_ptr che mi ha colpito.
update2: Risulta che la mia risposta proviene da due dei risponditori di seguito, e uno note from Wikipedia. Innanzitutto, Herb Sutter ha mostrato un uso valido (idioma del sink di origine e composizione di oggetti con collegamento a vita). In secondo luogo, ci sono negozi dove TR1 e boost non sono disponibili o bannati e solo C++ 03 è permesso. Terzo, secondo Wikipedia, la specifica C++ 0x sta deprecando auto_ptr e lo sostituisce con unique_ptr. Quindi la mia risposta è: usa unique_ptr se disponibile per me (su tutte le piattaforme in considerazione) altrimenti usa auto_ptr per i casi rappresentati da Sutter.
La guida di stile di Google vieta anche le eccezioni. Escluderemo le eccezioni perché qualcuno sbaglia loro e la guida allo stile di Google vieta? No. – sharptooth
non seguono le linee guida di Google, in generale, sono specifiche per loro e includono la necessità di integrazione con il loro enorme numero di codice C. (Ci sono molti motivi per non usare 'auto_ptr'). –