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

How should we implement moving for object types?

本文关键字:对象 类型 移动 实现 何实现 我们      更新时间:2023-10-16

我正在阅读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??
    }
};

我的问题是如何在B的一个主体中调用A的move构造函数?我会使用std::swap,但在查找它时,我找到了一些描述。参数属于lvalue引用类型,因此与移动语义无关。该怎么办?

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

请注意,参数不再是const(它本不应该是),所有初始化都可以使用初始化列表来实现最佳效率。