我想实现一个没有复制构造函数的类的移动构造函数。我得到一个错误,该类的成员的默认构造函数丢失。为什么移动构造函数需要其成员的默认构造函数?
这里有一个简单的例子来说明这一点:
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',而不是移动 - 构造它。 – user2357112