问题构造函数接受一个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传入。
-
做std::move。move(b)会产生一个unique_ptr<Type>&&的类型。这个称为rvalue reference(右值引用)。关于右值引用,又是一个很长的故事。参考http://thbecker.net/articles/rvalue_references/section_01.html
在接到unique_ptr<Type>&&之后,编译器又会隐式地把它变成一个右值。看起来有点多此一举,不过这保证了move被调用,保证unique_ptr被正确得使用。 -
直接使用unique_ptr的构造函数,因为函数回传的是一个右值。
网友评论