簡體   English   中英

我可以使用std :: vector :: operator []返回的引用多長時間?

[英]how long can I use reference returned by std::vector::operator[]?

std::vector::operator[] ”返回對向量容器中位置n處元素的引用。

我可以永遠使用此參考嗎? 我可以將其傳遞給另一個線程並從另一個線程使用嗎? 引用是否可能無效(例如,導致向量調整大小),並且在某些時候我擁有“垃圾”而不是真實元素?

載體的幾乎任何突變都可能導致對該元素的引用無效。 如果您從不對向量進行突變,則參考將仍然有效。

如果您將向量視為數組,則這是有道理的,因為任何將元素移位的擦除都可能意味着您不再指向正確的元素,並且如果您不得不重新分配內存,則元素將不再也要在同一個地方。

根據operator[]文檔

同時訪問或修改不同的元素是安全的

如果容器縮小,則對已刪除元素的所有引用都將無效(根據this )。 刪除元素的任何突變也是如此。

關於STL中容器的數據爭用已有詳細記錄(對於C ++ 11,在C ++ 03及更高版本中沒有多線程的概念)。

您可以將整個向量傳遞給另一個線程嗎? 這取決於。

您可以將對元素的特定引用傳遞給另一個讀取的元素,以防
1)在另一個線程嘗試獲取該元素之前,不破壞向量
2)通過引用后,無法調整向量的大小。 那么該元素的實際指針可能會完全更改。

編輯:我強烈建議將向量整體傳遞給一些std::mutex作為同步鎖,然后從那里繼續。 嘗試從一開始就防止引用無效,而不是躲避它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM