Почему resize () вызывает копию, а не перемещение содержимого вектора при превышении емкости? [Дубликат]
На этот вопрос уже есть ответ здесь:
Как применить семантику перемещения при росте вектора? 4 ответаДанный класс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&)
Почему?