【发布时间】:2018-04-09 12:14:13
【问题描述】:
我使用弱指针作为映射中的键。但是,当我尝试编译时,我收到了丑陋的消息,我将其解释为我缺少 std::weak_ptr 的比较运算符,这显然在 std::map 中是必需的,因为它根据它对元素进行排序键值。
然而,现在,weak_ptr 类是一个智能指针类型类,因此,它与指向某些托管数据的指针一起工作。
这个类不提供 operator
您的见解将不胜感激,在这里。 感谢期待。
【问题讨论】:
-
鉴于弱指针的底层对象随时可能被破坏,比较弱指针完全没有意义。
<完成指针比较后的皮秒,可能会破坏底层对象之一,因此您的比较结果就出来了。正如答案所声称的,这与一般的指针比较无关。std::less强制对指针进行弱排序。查一下。比较普通的指针并没有错。但是弱指针比较,就其本质而言,是完全没有意义的。 -
好的,谢谢。但是,据我了解,弱指针有一个指向匹配 shared_ptr 实例(s 系列)的“持有者结构”(计算使用它的智能指针的数量,并持有“真实”指针的东西)的指针, 对 ?因此,即使实例计数降至 0,使用原始地址进行比较也不应该那么难——除非实现在指针“过期”时删除了这个非常内部的结构(我不知道,我没有检查 STL 的内部代码。也许我应该)