Рассмотрим следующий код:
#include <iostream>
#include <vector>
using namespace std;
class A
{
public:
A(int) { cout << "int" << endl; }
A(A&&) { cout << "move" << endl; }
A(const A&) { cout << "copy" << endl; }
};
int main()
{
vector<A> v
{
A(10), A(20), A(30)
};
_getch();
return 0;
}
Вывод:
int
int
int
copy
copy
copy
A(10)
, A(20)
и A(30)
являются временными, верно?
Итак, почему вызван конструктор копирования? Не следует ли вместо этого вызывать конструктор перемещения?
Передача move(A(10))
, move(A(20))
, move(A(30))
вместо этого:
int
move
int
move
int
move
copy
copy
copy
В этом случае вызывается либо копировать, либо перемещать конструктор.
Что происходит?