2014-10-14 10 views
6

Z shared_ptr można użyć niestandardowego Deleter, jak:użyciu niestandardowego Deleter z unique_ptr

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

a to będzie pamiętać do fclose plik niezależnie od tego, jak wyjść funkcyjnych.
Jednak wydaje się nieco overkill do RefCount zmiennej lokalnej, więc chcę użyć unique_ptr:

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

jednak, że nie kompiluje.

Czy to jest wada? Czy istnieje proste obejście tego problemu? Czy brakuje mi czegoś trywialnego?

+0

[Może powiązanego] (http: // inspekcja kodu. stackexchange.com/questions/4679/shared-ptr-and-file-for-wrapping-cstdio-update-also-dlfcn-h) –

+2

Uwaga na [różnice] (http://cplusplus.github.io/LWG/ lwg-active.html # 24 15) pomiędzy współdzielonym i unikalnym wskaźnikiem, gdy dochodzi do usuwania wskaźników zerowych. –

+0

Tak, brakuje ci czegoś trywialnego: najwyraźniej nie patrzyłeś, jak deklarowana jest 'unique_ptr' lub czytasz jakąkolwiek dokumentację na jego temat. –

Odpowiedz

Powiązane problemy