[英]how long can I use reference returned by std::vector::operator[]?
std::vector::operator[]
”返回對向量容器中位置n處元素的引用。
我可以永遠使用此參考嗎? 我可以將其傳遞給另一個線程並從另一個線程使用嗎? 引用是否可能無效(例如,導致向量調整大小),並且在某些時候我擁有“垃圾”而不是真實元素?
載體的幾乎任何突變都可能導致對該元素的引用無效。 如果您從不對向量進行突變,則參考將仍然有效。
如果您將向量視為數組,則這是有道理的,因為任何將元素移位的擦除都可能意味着您不再指向正確的元素,並且如果您不得不重新分配內存,則元素將不再也要在同一個地方。
您可以將整個向量傳遞給另一個線程嗎? 這取決於。
您可以將對元素的特定引用傳遞給另一個讀取的元素,以防
1)在另一個線程嘗試獲取該元素之前,不破壞向量
2)通過引用后,無法調整向量的大小。 那么該元素的實際指針可能會完全更改。
編輯:我強烈建議將向量整體傳遞給一些std::mutex
作為同步鎖,然后從那里繼續。 嘗試從一開始就防止引用無效,而不是躲避它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.