移动std :: shared_ptr的函数声明

时间:2017-04-19 01:02:18

标签: c++ c++11 shared-ptr move-semantics

通过值与引用传递共享指针几乎没有什么好的答案。但是,我没有找到关于“移动”共享指针的最佳实践的答案。

我的函数有一个指向对象的共享指针,它不想保留。据我所知,移动它是性能方面的最佳选择,因为我们可以跳过增加然后立即减少引用计数的步骤。然而,我不清楚,如果这两个声明之间存在差异:

来电者功能

void foo(std::shared_ptr<X> x);

声明应该

选项1

void foo(std::shared_ptr<X>&& x);

或选项2

{{1}}

1 个答案:

答案 0 :(得分:3)

值得注意的是std::move实际上并未对对象执行移动,它只是将对象转换为右值(xvalue)。

然后对于第一种情况,参数x将从sourcePtr移动构造。之后sourcePtr的托管指针将为null。

对于第二种情况,没有构建std::shared_ptr; x是一个右值引用,并绑定到sourcePtr。那么会发生什么取决于foo()的实施,并且sourcePtr不会被移动,直到您通过foo()x内执行此操作,例如std::shared_ptr<X> new_x = std::move(x);<form NAME="form1" METHOD="POST" ACTION="operation/validateLogin.php"> Username <br/><input name="username" type=text autocomplete="off"><br/><br/> Password <br/><input name="password" type=text autocomplete="off"><br/><br/> <button class="btn btn-primary submit" type="submit">Sign In</button> </form>