c++ - 在 (unordered_)set 中修改 shared_ptr 是否安全?

标签 c++ stl set shared-ptr unordered-set

存储在 setunordered_set 中的元素是不可变的。如果更改存储在 set 中的元素,这可能会导致该集合不再正常工作。 但是,这是否包括将 shared_ptr 存储在集合中时指向的对象?

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

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

这是正确的吗?

最佳答案

智能指针的

hash() 等同于指针值的 hash(),但是指针值的 hash()只依赖于指针,而不依赖于指针对象。因此您可以安全地修改容器中的对象 - 哈希函数结果不会更改。

关于c++ - 在 (unordered_)set 中修改 shared_ptr 是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25057920/

相关文章:

java - CvMatchShapes 返回什么?

c++ - std::map<whatever,double> 是否自动将值归零?

C++:使用 Firebreath 在多个实例中绘制位图

c++ - 在带有 bind2nd 和 string::compare 的 std::vector<std::string> 上使用 find_if

c++ - 为什么 unorded_set rehash 复杂度在最坏情况下可能是 O(n^2) ?

c++ - std::map 插入的可疑结果

java - 如何通过 JTable 列元素填充一组元素?

c++ - C++ 中的 reduce 函数(用于许多集合 union )

c++ - 在 C++ 中使用多个流写入单个输出文件

scala - 为什么最多 4 个元素的集合是有序的,而更大的元素则不是?