c – 为什么没有运算符

参见英文答案 > std::map with std::weak_ptr key                                    2个
我在地图中使用弱指针作为键.但是,当我尝试编译时,我得到了丑陋的消息,我解释为我缺少std :: weak_ptr的比较运算符,显然,它在std :: map中是必需的,因为它根据它对其元素进行排序核心价值.

但是,现在,weak_ptr类是一个智能指针类型类,因此可以使用指向某些托管数据的指针.

有没有一个很好的理由为什么这个类不提供运算符的基本实现<方法 ?我的意思是,比较指针值对我来说似乎很明显,如果需要它以不同的方式工作,那么应该能够扩展或重新定义方法,以获得预期的行为,而不是'是吗? 在这里,您的见解将非常受欢迎.
谢谢你的期待.

最佳答案
更新:有一种定义明确的方法来比较std :: weak_ptr,请参阅@ Richard的回答.我将把我的答案留给历史档案目的.

实施一个好的操作符<需要从weak_ptr创建一个shared_ptr并调用其运算符<.这是
>“昂贵”的行动
>当底层shared_ptr不再存在时,未定义.

一般来说,很难获得定义良好且性能良好的weak_ptrs.

请注意,您始终可以将自定义比较器传递给地图对象,您可以按照自己想要的方式实现该比较器,并且只保留本地对象.但是,由你来决定一个很好的方法来做到这一点.也许您可以使用指向连接的shared_ptr的控制块的指针,但这是您无法访问的实现细节.所以我真的没有看到这样做的有意义的方法.

转载注明原文:c – 为什么没有运算符 - 代码日志