我可以使用std :: vector :: operator []返回的引用多长时间?

时间:2015-07-06 13:00:31

标签: c++ vector

std::vector::operator[]"返回对向量容器中位置n处元素的引用。"

我可以永远使用此参考吗?我可以将它传递给另一个线程并使用另一个线程吗?是否有可能引用无效(例如导致向量调整大小)并且我有"垃圾"在某些时候,而不是真正的元素?

3 个答案:

答案 0 :(得分:2)

几乎任何向量的变异都可能导致对元素的引用失效。如果你从不改变向量,那么引用将保持有效。

如果你把一个向量看作一个数组,那么这是有意义的,因为任何你必须移动元素的擦除可能意味着你不再指向正确的元素,如果你必须重新分配内存然后元素将不再是同一个地方。

答案 1 :(得分:1)

根据operator[]的{​​{3}}:

  

同时访问或修改不同的元素是安全的

如果容器缩小,则对已删除元素的所有引用都将失效(根据documentation)。这同样适用于删除元素的任何突变。

STL中的容器有很好的文档记录(对于C ++ 11,在C ++ 03及之前没有多线程的概念)。

答案 2 :(得分:0)

你可以将整个矢量作为参考传递给另一个线程吗?这取决于。

您可以将对元素的特定引用传递给另一个元素 如果是,请阅读 1)在另一个线程试图获得该元素之前,不会破坏该向量 2)传递引用后没有调整向量的大小。然后元素的实际指针可以完全改变。

编辑: 我强烈建议将整个向量与一些std::mutex作为同步锁传递并从那里继续。尽量避免在第一时间引用无效,而不是躲避它。