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()仅取决于指针,而不取决于指针.因此,您可以安全地修改容器中的对象 – 哈希函数结果将不会更改.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- c# – 将T-SQL类型作为字符串,将它评估为.Net类型的最简单方
- 正则表达式
- 解决依赖冲突:maven-enforcer-plugin插件
- [Swift 开发] 使用闭包传值(typealias)
- [一句秒懂]animation flash动画之一
- Swift的功能和方法有什么区别?
- RTMP协议发布H264 + AAC的实时流媒体,可以用FLASH直接播放
- ruby-on-rails – execjs在windows上做michael hartl教程的
- c# – 如何在配置文件中添加json字符串作为应用程序设置值
- ruby-on-rails – 使用Rails和Paperclip设置桶名的域名(buc