首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么move构造函数的成员需要一个默认的构造函数?

为什么move构造函数的成员需要一个默认的构造函数?
EN

Stack Overflow用户
提问于 2016-09-03 00:50:43
回答 1查看 1.9K关注 0票数 19

我试图为一个没有复制构造函数的类实现一个移动构造函数。我得到了一个错误,类成员的默认构造函数丢失了。

这里有一个简单的例子来说明这一点:

代码语言:javascript
复制
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) {}
};

尝试编译这段代码,我得到了:

代码语言:javascript
复制
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;
  ^

为什么这是一个错误?有什么办法绕过它吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-03 00:53:44

使用构造函数的初始值设定项列表初始化A成员。正如编译器所说,move构造函数使用A的默认构造函数。

代码语言:javascript
复制
B(B&& b) : a(std::move(b.a)) {}
票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39297334

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档