我们应该如何实现对象类型的移动?

时间:2015-12-15 04:27:22

标签: c++ c++11 move-semantics

我正在阅读关于C ++ 11中的移动语义,现在我正在尝试理解移动构造函数的实现。假设我们有以下类:

struct A {
    A(){ }
    virtual ~A(){ }
    A(const A&&){ }
};

struct B{
    int i;
    A a;
    virtual ~B(){ }
    B(const B&& b){
        i = b.i;
        i = 0;
        //How to move a??
    }
};

我的问题是如何在A的一个机构内调用B的移动构造函数?我使用的是std::swap,但是我找到了description。参数是 左值 引用类型,因此它与移动语义无关。怎么办?

1 个答案:

答案 0 :(得分:5)

B(B&& b)
  : i(b.i)
  , a(std::move(b.a))
{
}

请注意,参数不再是const(它本来就不应该),并且可以使用初始化列表完成所有初始化,以获得最佳效率。