2016-11-22 72 views
-2

我在某处读取已存在于矢量中的对象,并在重新分配矢量时复制该对象。应该矢量中的所有对象都有复制构造函数吗?

这是为什么?他们不应该被移动吗?另外,这是否意味着需要为存储在向量中的对象编写一个拷贝构造函数?

+0

这是非常清楚地表明[这里](http://en.cppreference.com/w/cpp/container/vector)。从C++ 11开始,元素符合'Erasable'概念。 –

回答

3

C++ reference

直到的C++ 11出现的矢量的元素必须满足的CopyAssignableCopyConstructible要求。

从C++ 11到C++ 17,强加在元素上的需求取决于对容器执行的实际操作。一般而言,要求元素类型是完整类型,并且满足Erasable的要求,但是许多成员函数提出了更严格的要求。

从C++ 17及更高版本开始,对元素施加的要求取决于对容器执行的实际操作。一般来说,要求元素类型符合Erasable的要求,但许多成员函数会施加更严格的要求。如果分配器满足分配器完整性要求,则此容器(但不是其成员)可以使用不完整的元素类型实例化。