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?
[Może powiązanego] (http: // inspekcja kodu. stackexchange.com/questions/4679/shared-ptr-and-file-for-wrapping-cstdio-update-also-dlfcn-h) –
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. –
Tak, brakuje ci czegoś trywialnego: najwyraźniej nie patrzyłeś, jak deklarowana jest 'unique_ptr' lub czytasz jakąkolwiek dokumentację na jego temat. –