美文网首页
右值,右值引用,move

右值,右值引用,move

作者: glimmercn | 来源:发表于2018-01-15 10:58 被阅读10次

    问题构造函数接受一个unique_ptr的参数。

    A(unique_ptr<Type> b);
    

    如果是定义一个unique_ptr然后直接传入,会报错。像这样。

    unique_ptr<Type> unique_b = new Type();
    A a(b);
    

    因为这回隐式调用unique_ptr的复制构造函数,但unique_ptr已经禁止了复制构造函数。以下是怎么把unique_ptr作为参数传入。
    https://stackoverflow.com/questions/8114276/how-do-i-pass-a-unique-ptr-argument-to-a-constructor-or-a-function

    (A)就解释了如何通过value传入。

    1. 做std::move。move(b)会产生一个unique_ptr<Type>&&的类型。这个称为rvalue reference(右值引用)。关于右值引用,又是一个很长的故事。参考http://thbecker.net/articles/rvalue_references/section_01.html
      在接到unique_ptr<Type>&&之后,编译器又会隐式地把它变成一个右值。看起来有点多此一举,不过这保证了move被调用,保证unique_ptr被正确得使用。

    2. 直接使用unique_ptr的构造函数,因为函数回传的是一个右值。

    相关文章

      网友评论

          本文标题:右值,右值引用,move

          本文链接:https://www.haomeiwen.com/subject/jddroxtx.html