c++ - Unique_ptr 自动销毁魔法

标签 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';

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/

相关文章:

c++ - 智能指针作为条件 : are if (p) and if (p. get()) 等效?

c++ - 从 unique_ptr<T> 的 void* 转换为 T** 是如何工作的?

C++ 架构 : callback to generic object member function

c++ - 我是否需要在构造函数中显式初始化 std::unique_ptr ?

php preg_match 在 C++ 中与 Boost 的等价物?

c++ - 如何在 C++ 中解析数组以查找重复项

c++ - 在新的 C++11 中可以创建可选引用吗?

c++ - 调用C标准库函数的标准C++方式

c++ - 如何使用另一个变量声明一个变量?

c++ - 对 CString 中包含的值进行舍入