来自: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';
block 下方的注释://此处调用了 fclose(),但前提是 FILE* 不是空指针 //(也就是说,如果 fopen 成功)
问题:这是怎么发生的?我知道调用 close(NULL) 是不好的。那么检查发生在哪里? decltype(&std::fclose) 是怎么知道检查 null 的?如果在其他时间甚至在 null 上调用它是可取的并由函数处理怎么办?
最佳答案
unique_ptr::~unique_ptr 的要求要求它比较 get()
和 nullptr
并且只在它不为空时调用删除器。
如果在 nullptr
上调用删除器是可取的,那么您的应用程序是非典型的,可能不适合使用 unique_ptr
。您无法修改此行为。
关于c++ - Unique_ptr 自动销毁魔法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42349388/