Я пытался реализовать конструктор перемещения для класса без конструктора копирования. У меня возникла ошибка, когда конструктор по умолчанию для члена класса отсутствовал.Почему конструктор перемещения требует конструктора по умолчанию для своих членов?
Вот простой пример, чтобы проиллюстрировать это:
struct A {
public:
A() = delete;
A(A const&) = delete;
A(A &&a) {}
};
struct B {
A a;
B() = delete;
B(B const&) = delete;
B(B &&b) {}
};
Попытка собрать это, я получаю:
move_without_default.cc: In constructor ‘B::B(B&&)’:
move_without_default.cc:15:11: error: use of deleted function ‘A::A()’
B(B &&b) {}
^
move_without_default.cc:6:2: note: declared here
A() = delete;
^
Почему это ошибка? Все вокруг?
заменить '{}' на '= default;' – cpplearner
Поскольку конструктор по умолчанию 'A' удален, но' B' его использует. – tkausl
Пустой конструктор перемещения не будет автоматически пытаться выполнить перемещение по каждому элементу. Конструктор перемещения пытается установить по умолчанию 'a', а не move-construct. – user2357112