Когда срабатывает конструктор перемещения?

Есть код:

#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


Ответы (0 шт):