给定X
以下类(明确定义的成员函数以外的特殊成员函数与本实验无关):
struct X
{
X() { }
X(int) { }
X(X const&) { std::cout << "X(X const&)" << std::endl; }
X(X&&) { std::cout << "X(X&&)" << std::endl; }
};
下面的程序创建一个类型对象的向量X
并调整它的大小,以便超出其容量并强制重新分配:
#include <iostream>
#include <vector>
int main()
{
std::vector<X> v(5);
v.resize(v.capacity() + 1);
}
由于类X
提供了一个移动构造函数,我希望向量的先前内容在重新分配后被移动到新的存储中。令人惊讶的是,情况似乎并非如此,我得到的输出是:
X(X const&)
X(X const&)
X(X const&)
X(X const&)
X(X const&)
为什么?