簡體   English   中英

std::vector 移動分配與移動構造:為什么“其他”的 state 不一致?

[英]std::vector move assignment vs move construction: why is the state of 'other' not consistent?

對於搬家施工:

移動后, other 保證為空()。 1

對於移動分配,經常引用的:

之后其他在有效但未指定的 state 中。 2

為什么這兩種情況下其他的state不同?

有 2 種流行的方法可以在內部保存指向數據的指針的容器(如 vector)中實現移動:

  • 您可以清空此,然后將指針(以及大小和容量)從其他復制到此,然后將其他成員設置為 nullptr/zero
  • 您可以交換數據成員(指針、大小和容量)。

該標准希望為實現留出余地。 這些保證是它在允許任何一種實現方法時可以做出的最強有力的保證:

  • 移動構造函數:

    • 第一種方法:將其他留在空 state
    • 第二種方法(交換):將其他留在空 state
  • 搬家任務:

    • 第一種方法:將其他留在空 state
    • 第二種方法(交換):將 other 作為初始 this 的副本

暫無
暫無

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

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