【发布时间】:2021-11-25 08:23:14
【问题描述】:
当 std::vector 重新分配其内存数组时,使用什么样的复制/移动构造函数将元素复制/移动到新房子?
【问题讨论】:
当 std::vector 重新分配其内存数组时,使用什么样的复制/移动构造函数将元素复制/移动到新房子?
【问题讨论】:
如果移动构造函数存在并且是noexcept,则使用它。否则使用复制构造函数。
使用可能抛出的移动构造函数是不可取的,因为它可能会发生一些对象被移动到新存储,然后异常阻止其余对象被移动。
cppreference.com 网站确实说过,如果对象是不可复制的,但有一个非 noexcept 移动构造函数,那么它将使用该移动构造函数,如果抛出异常,则具有“未指定的行为”。我猜这意味着元素可能会从向量中丢失。
【讨论】:
v.reserve( v.capacity() + 1 );