std::vector::operator[]
"返回对向量容器中位置n处元素的引用。"
我可以永远使用此参考吗?我可以将它传递给另一个线程并使用另一个线程吗?是否有可能引用无效(例如导致向量调整大小)并且我有"垃圾"在某些时候,而不是真正的元素?
答案 0 :(得分:2)
几乎任何向量的变异都可能导致对元素的引用失效。如果你从不改变向量,那么引用将保持有效。
如果你把一个向量看作一个数组,那么这是有意义的,因为任何你必须移动元素的擦除可能意味着你不再指向正确的元素,如果你必须重新分配内存然后元素将不再是同一个地方。
答案 1 :(得分:1)
根据operator[]
的{{3}}:
同时访问或修改不同的元素是安全的
如果容器缩小,则对已删除元素的所有引用都将失效(根据documentation)。这同样适用于删除元素的任何突变。
STL中的容器有很好的文档记录(对于C ++ 11,在C ++ 03及之前没有多线程的概念)。
答案 2 :(得分:0)
你可以将整个矢量作为参考传递给另一个线程吗?这取决于。
您可以将对元素的特定引用传递给另一个元素
如果是,请阅读
1)在另一个线程试图获得该元素之前,不会破坏该向量
2)传递引用后没有调整向量的大小。然后元素的实际指针可以完全改变。
编辑:
我强烈建议将整个向量与一些std::mutex
作为同步锁传递并从那里继续。尽量避免在第一时间引用无效,而不是躲避它。