我试图为一个没有复制构造函数的类实现一个移动构造函数。我得到了一个错误,类成员的默认构造函数丢失了。
这里有一个简单的例子来说明这一点:
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;
^
为什么这是一个错误?有什么办法绕过它吗?
发布于 2016-09-03 00:53:44
使用构造函数的初始值设定项列表初始化A
成员。正如编译器所说,move构造函数使用A
的默认构造函数。
B(B&& b) : a(std::move(b.a)) {}
https://stackoverflow.com/questions/39297334
复制相似问题