加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 修改(无序)集合中的shared_ptr是否安全?

发布时间:2020-12-16 07:09:24 所属栏目:百科 来源:网络整理
导读:存储在set或unordered_set中的元素是不可变的.如果更改存储在集合中的元素,则可能导致集合不再正常工作. 但是,这是否包含在集合中存储shared_ptr时的指向对象? 就set而言,它使用less()来比较两个对象.如果指向的对象发生更改或引用计数发生更改,则结果不应
存储在set或unordered_set中的元素是不可变的.如果更改存储在集合中的元素,则可能导致集合不再正常工作.
但是,这是否包含在集合中存储shared_ptr时的指向对象?

就set而言,它使用less()来比较两个对象.如果指向的对象发生更改或引用计数发生更改,则结果不应更改.所以我理解,拥有一组shared_ptr并修改指向对象是完全安全的.

但是,由于unordered_set使用hash()来计算其元素的哈希值,这相当于在shared_ptr的指向对象上调用hash(),修改指向对象会让我们陷入麻烦.

它是否正确?

解决方法

用于智能指针的hash()等效于指针值的hash(),但指针值的hash()仅取决于指针,而不取决于指针.因此,您可以安全地修改容器中的对象 – 哈希函数结果将不会更改.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读