当std :: vector重新分配其内存数组时,是复制构造函数还是移动构造函数?

时间:2017-07-26 01:55:28

标签: c++ c++11 stl stdvector

当std :: vector重新分配其内存数组时,使用什么样的复制/移动构造函数将元素复制/移动到新房子?

1 个答案:

答案 0 :(得分:5)

如果move-constructor存在且是noexcept则使用它。否则使用复制构造函数。

使用可能抛出的move-constructor是不可取的,因为某些对象可能会移动到新存储,然后异常会阻止其他对象被移动。

cppreference.com网站确实说如果对象是不可复制的,但是有一个非noexcept移动构造函数,那么它将使用该移动构造函数,如果抛出异常则带有“未指定的行为”。我猜这意味着元素可能会从向量中丢失。