std::vector move assignment vs construction:为什么 'other' 的状态不一致?

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

移动构造:

After the move, other is guaranteed to be empty(). 1

对于移动分配,经常引用:

other is in a valid but unspecified state afterwards. 2

为什么other的状态在这两种情况下不同?

有 2 种流行的方法可以在内部保存指向数据的指针的 vector 等容器中实现移动:

  • 你可以清空这个,然后将指针(以及大小和容量)从其他复制到这个,然后将其他成员设置为nullptr/zero
  • 您可以交换数据成员(指针、大小和容量)。

该标准希望为实现留有余地。这些保证是它在允许任何一种实现方法时可以做出的最强有力的保证:

  • 移动构造函数:

    • 第一种方法:让其他人处于空状态
    • 第二种方法(交换):让其他方法处于空状态
  • 移动作业:

    • 第一种方法:让其他人处于空状态
    • 第二种方法(交换):将其他作为初始 this
    • 的副本