std::vector重新分配其内存数组时,使用的是拷贝构造函数还是移动构造函数?
When std::vector reallocate its memory array, is copy constructor or move constructor used?
当std::vector重新分配其内存数组时,使用什么样的复制/移动构造函数将元素复制/移动到新房子?
如果移动构造函数存在并且是 noexcept
则使用它。否则使用复制构造函数。
使用可能抛出异常的移动构造函数是不可取的,因为可能会发生某些对象被移动到新存储然后异常阻止其余对象被移动的情况。
cppreference.com 网站确实说如果对象是不可复制的,但有一个非 noexcept 移动构造函数,那么它会使用那个移动构造函数,"unspecified behaviour" 如果有异常被抛出。我想这意味着元素可能会从向量中丢失。
当std::vector重新分配其内存数组时,使用什么样的复制/移动构造函数将元素复制/移动到新房子?
如果移动构造函数存在并且是 noexcept
则使用它。否则使用复制构造函数。
使用可能抛出异常的移动构造函数是不可取的,因为可能会发生某些对象被移动到新存储然后异常阻止其余对象被移动的情况。
cppreference.com 网站确实说如果对象是不可复制的,但有一个非 noexcept 移动构造函数,那么它会使用那个移动构造函数,"unspecified behaviour" 如果有异常被抛出。我想这意味着元素可能会从向量中丢失。