Unique_ptr自动破坏魔法

时间:2017-02-20 16:16:16

标签: c++ c++11 unique-ptr

来自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上调用它是可取的并且由函数处理呢?

1 个答案:

答案 0 :(得分:4)

unique_ptr::~unique_ptr的要求要求get()nullptr进行比较,只有在删除时才会调用删除者。

如果需要在nullptr上调用您的删除者,您的应用程序是非典型的,可能不适合使用unique_ptr。您无法修改此行为。