c++ - 我们应该如何实现对象类型的 move ?

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

我正在阅读 C++11 中的 move 语义,现在我正试图了解 move 构造函数的实现。假设我们有以下类:

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,但在寻找它时我发现了一些 description .参数是lvalue 引用类型,因此它与 move 语义无关。怎么办?

最佳答案

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

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

关于c++ - 我们应该如何实现对象类型的 move ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34281124/

相关文章:

c++ - boost::multi_index 和 std::map find() 和 erase()

c++ - 线程新手:在线程参数中使用 std::ref() 的问题

c++ - 为什么我不能使用迭代器将 unique_ptr 从集合 move 到函数参数?

c++ - 按值传递与 const & 和 && 重载

具有默认参数的函数的 C++ 偏序

c++ - 是否可以使用 boost::bind 来有效地连接函数?

c++ - GCC NRVO/RVO 警告

c++ - 如何在 C++ 中将矩阵的外环旋转 n 步?

C++ move 语义和内置类型

C++ 无法在 OpenCV 中集成 JPEG 管道