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

时间:2011-01-20 17:34:19

标签: c++11 hash weak-ptr stdhash

阅读有关运营商的讨论后<对于std :: weak_ptr,我看不出有什么理由为什么定义std :: hash来使用std :: weak_ptr的控制块是行不通的。我也无法相信标准委员会忽视了这一点。有没有人阅读过有关该主题的相关讨论?

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

2 个答案:

答案 0 :(得分:3)

我对历史有点熟悉。还有另一篇后来的论文你也应该读到:

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提案。

答案 1 :(得分:2)

事实证明,日本抱怨这一点(见lwg issue 1406),霍华德在his answer中提出的建议就是提议作为决议。不幸的是,它被推迟了(大概是因为时间限制)。