首頁 >後端開發 >C++ >C 中移出向量總是空的嗎?

C 中移出向量總是空的嗎?

Susan Sarandon
Susan Sarandon原創
2024-11-17 17:34:02612瀏覽

Are Moved-From Vectors Always Empty in C  ?

移出向量的空性:探索選項

在C 程式設計領域,向量是通用的資料結構,通常用於其高效的記憶體管理。然而,在理解移出向量的行為時,程式設計師可能會遇到關於其空性的問題。

標準定義和要求

C 標準提供了通用的物件被移走後的行為準則,如N3485 17.6.5.15 所述[lib.types. movedfrom]/1:

「C 標準庫中定義的類型的物件可以從(12.8) 移動。物件應置於有效但未指定的狀態。 >

向量的移動建構函數,vector::vector(vector&& v),需要具有恆定的複雜性。這需要將資源從來源向量 v 轉移到新向量 *this,使 v 處於空狀態。

探索移動分配與分配器影響

The行動賦值運算子、向量& vector::operator=(vector&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& v),表現出更多的複雜性並且受到向量分配器的影響。出現三種情況:

啟用分配器傳播:

當allocator_traits::propagate_on_container_move_assignment::value 為true 時,移動元素和賦值運算元內存,傳輸v 的所有權,並留下兩個向量空。

  1. 停用分配器傳播(相同分配器):與前一種情況類似,移動賦值運算子類似於情況 1,但完整保留了分配器。然而,它遵循相同的模式,導致空向量。
  2. 禁用分配器傳播(不同的分配器):在這種情況下,移動分配無法傳輸資源並訴諸於移動單獨的元素。這需要能夠移動分配或複製分配元素,可能使移出向量 v 包含移出元素。某些實作可能會選擇明確清除 v,但這不是標準強制要求的。
  3. 結論

    雖然向量在移動後通常會變空,但也有例外,這取決於分配器的行為以及移動或複製分配元素的能力。實現可以自由地採用不同的方法,只要它們遵守移出對象的一般要求即可。在 C 應用程式中使用向量和移動語義時,理解這些場景對於程式設計師至關重要。

以上是C 中移出向量總是空的嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn