【发布时间】:2014-10-12 06:44:53
【问题描述】:
以下两个声明有什么区别?我什么时候应该更喜欢其中一个?
void f(unique_ptr<T> x);
void f(unique_ptr<T> &&x);
在我看来,这两种方法都意味着 f() 拥有指向对象的所有权,但我见过有人同时使用它们。我希望第一个是标准的,第二个被认为是不好的做法。
【问题讨论】:
-
第一个按值传递,因此不会用
unique_ptr编译,因为它是不可复制的。 -
@JonathanPotter - 你错了,如果你使用 move() 可以编译
-
f确实在第一种情况下取得所有权,而f可能在第二种情况下取得所有权。 -
你甚至不必使用 move,它只需要一个 r 值,例如函数返回值,或者直接调用构造函数。
标签: c++ c++11 move-semantics unique-ptr rvalue-reference