c++11 - 为什么在 C++0x 中没有为 std::weak_ptr 定义 std::hash ?

标签 c++11 hash weak-ptr stdhash

在阅读了关于 std::weak_ptr 的operator< 的讨论后,我看不出为什么定义 std::hash 来使用 std::weak_ptr 的控制 block 不起作用的任何原因。我也不敢相信标准委员会忽视了这一点。有人读过有关该主题的相关讨论吗?

编辑:关于 std::weak_ptr 的运算符 < 的讨论 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1590.html

最佳答案

我对历史有些了解。您还应该阅读另一篇后来的论文:

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2637.pdf

我相信后来的论文正是当前草案中的内容。总之,shared_ptr 具有基于值的运算符<() 基于所有权的成员函数owner_before。 weak_ptr 只有后者。

我最好的猜测是对weak_ptr 的哈希支持只是被删除了。据我所知,没有人提出对weak_ptr 进行哈希支持。在将 C++0x 标准化的过程中存在很多很多问题,解决这些问题的时间和资源有限,毫无疑问会出现错误和缺失。

我还认为要添加对weak_ptr的哈希支持,必须与owner_before类似地完成:将成员函数owner_hash添加到shared_ptr和weak_ptr。我怀疑对 C++0x 来说这样做已经太晚了,但这似乎是一个合理的 TR2 提案。

关于c++11 - 为什么在 C++0x 中没有为 std::weak_ptr 定义 std::hash ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4750504/

相关文章:

c++ - 我可以在没有自定义析构函数的情况下使用 std::shared_ptr 和 weak_ptr 创建共享对象池吗?

c++ - 以编程方式创建终端命令?

哈希函数从整数坐标对中提供唯一的 uint

php - 在没有任何 HTML 呈现的情况下显示页面

c++ - 将 shared_ptr<Type> 转换为 weak_ptr<void> 并返回

c++ - 存储 std::weak_ptr<void> 和使用 static_pointer_cast

c++ - 从对其他进程(如 cmds)可见的 C++ 代码设置当前用户环境变量

c++ - 为什么 shrink_to_fit 不具有约束力?

c++ - 访问控制对已删除的构造函数是否重要?

java - 使用 it.next() 返回元素和直接在 sysout 中打印哈希集的对象有什么区别