存储在 set
或 unordered_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/