来自:http://en.cppreference.com/w/cpp/memory/unique_ptr
问题:为什么只有在fp不为NULL时才调用close()?
std::unique_ptr<std::FILE, decltype(&std::fclose)> fp(std::fopen("demo.txt", "r"),
&std::fclose);
if(fp) // fopen could have failed; in which case fp holds a null pointer
std::cout << (char)std::fgetc(fp.get()) << '\n';
在块下面的注释:// fclose()在这里调用,但仅当FILE *不是空指针时 //(即,如果fopen成功)
问题:这是怎么发生的?我知道调用close(NULL)很糟糕。那么支票在哪里发生了? decltype(&amp; std :: fclose)如何知道检查null?如果其他时间甚至在null上调用它是可取的并且由函数处理呢?
答案 0 :(得分:4)
unique_ptr::~unique_ptr的要求要求get()
与nullptr
进行比较,只有在删除时才会调用删除者。
如果需要在nullptr
上调用您的删除者,您的应用程序是非典型的,可能不适合使用unique_ptr
。您无法修改此行为。