#include <thread>
#include <atomic>
#include <stdio.h>
#include <iostream>
using namespace std ;
struct my_point_deleter {
void operator()(FILE* f) const
{
cout << "my_point_deleter called !!" << endl ;
fclose(f) ;
}
};
void func(FILE *f)
{
cout << "func called " << endl ;
fclose(f) ;
}
int main()
{
#ifdef TEST1
unique_ptr<FILE, void(*) (FILE*)> f(fopen("hanoi.c", "r"),[](FILE* f){cout << "going closed" << endl; fclose(f);});
#endif
#ifdef TEST2
unique_ptr<FILE, my_point_deleter> f(fopen("hanoi.c", "r")) ;
#endif
#ifdef TEST3
unique_ptr<FILE, void(*) (FILE*)> f(fopen("hanoi.c", "r"),&func) ;
#endif
char aux[100];
while (!feof(f.get())) //f.get returns me the actual plain old pointer
{
fgets(aux, 100, f.get());
cout << aux;
} //No need to invoke fclose() because the unique_ptr will take care of it.
}
留言列表