2014-10-14 17 views
6

Con shared_ptr è possibile utilizzare un deleter personalizzato, come:utilizzando deleter personalizzato con unique_ptr

auto fp = shared_ptr<FILE>(fopen("file.txt", "rt"), &fclose); 
fprintf(fp.get(), "hello\n"); 

e questo si ricorderà di fclose il file a prescindere di come la funzione termina.
Tuttavia, sembra un po 'eccessivo per refcount una variabile locale, quindi voglio usare unique_ptr:

auto fp = unique_ptr<FILE>(fopen("file.txt", "rt"), &fclose); 

tuttavia, che non può essere compilato.

È un difetto? C'è una soluzione semplice? Mi manca qualcosa di banale?

+0

[forse relativa] (http: // CodeReview. stackexchange.com/questions/4679/shared-ptr-and-file-for-wrapping-cstdio-update-also-dlfcn-h) –

+2

Attenzione alle [differenze] (http://cplusplus.github.io/LWG/ LWG-active.html # 24 15) tra il puntatore condiviso e univoco quando si tratta di eliminare i puntatori nulli. –

+0

Sì, ti manca qualcosa di banale: apparentemente non hai visto come 'unique_ptr' è stato dichiarato o letto qualsiasi documentazione su di esso –

risposta

Problemi correlati