Ответ 1
Конструктор перемещения для класса X неявно объявляется как дефолт точно, когда
- X не имеет объявленного пользователем конструктора копирования,
- X не имеет объявленного пользователем оператора назначения копирования,
- X не имеет объявленного пользователем оператора назначения перемещения,
- X не имеет объявленного пользователем деструктора и
- конструктор перемещения не будет неявно определен как удаленный.
Так, например, если ваш класс имеет элемент данных типа класса, у которого нет конструктора перемещения, ваш класс не получит конструктор перемещения, даже если у него нет объявленного конструктора копирования/перемещения, поскольку неявно объявлено move constructor будет определен как удаленный (из-за этого элемента данных).