通过值与引用传递共享指针几乎没有什么好的答案。但是,我没有找到关于“移动”共享指针的最佳实践的答案。
我的函数有一个指向对象的共享指针,它不想保留。据我所知,移动它是性能方面的最佳选择,因为我们可以跳过增加然后立即减少引用计数的步骤。然而,我不清楚,如果这两个声明之间存在差异:
来电者功能
void foo(std::shared_ptr<X> x);
声明应该
选项1
void foo(std::shared_ptr<X>&& x);
或选项2
{{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>
。