右值,右值引用,move

2018-01-15  本文已影响10人  glimmercn

问题构造函数接受一个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的构造函数,因为函数回传的是一个右值。

上一篇 下一篇

猜你喜欢

热点阅读