Когда срабатывает конструктор перемещения?
Есть код:
#include <iostream>
class A
{
public:
A(int a)
{
std::cout << "prosto constructor" << std::endl;
}
A(const A& a)
{
std::cout << "constuctor copirovaniya" << std::endl;
}
A(A&& a)
{
std::cout << "constuctor peremesheniya" << std::endl;
}
};
int main()
{
A a{A{1}};
A aa{a};
return 0;
}
Вывод:
prosto constructor
constuctor copirovaniya
В вышепривиденной программе я пытался заставить сработать конструктор перемещения. Если я инициализирую объект класса другим объектом класса, то потнятное дело срабатывает конструктор копирования. При инициализации с помощью анонимного объекта, вместо конструктора перемещения срабатывает обычный конструктор (я так понимаю компилятор заменяет A a{A{1}}; на A a{1};). Из чего я могу сделать вывод, что конструктор перемещения НЕВОЗМОЖНО заставить сработать.
Вопрос: Если я прав, то тогда для чего конструкторы перемещения нужны? Если нет, то не могли бы предоставить парочку примеров, там где срабатывает ИМЕННО конструктор перемещения.
P.S.:
Если это важно, то компилировал следующим образом:g++ -Wall -Weffc++ -Wextra -Wsign-conversion -Wpedantic -g3 -O0 -std=c++17 main.cpp -o main