Я пытался реализовать конструктор перемещения для класса без конструктора копирования. Я получил ошибку, что конструктор по умолчанию для члена класса отсутствует.
Вот тривиальный пример, иллюстрирующий это:
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;
- person cpplearner   schedule 02.09.2016A
удален, ноB
использует его. - person tkausl   schedule 02.09.2016a
, а не построить его. - person user2357112 supports Monica   schedule 02.09.2016A
и отсутствие реализации каких-либо других конструкторов, кроме конструктора перемещения, не означает ли это, что объектA
никогда не может быть создан до того, как его можно будет переместить в другой объектA
? Или такие вещи, как инициализация фигурной скобки, обходят это? - person Remy Lebeau   schedule 02.09.2016