Should/Can 智能指针在函数中通过引用传递

Should/Can smart pointers be passed by reference in functions

Should/Can智能指针在函数中通过引用传递?

即:

void foo(const std::weak_ptr<bar>& x)

当然你可以通过 const& 传递 smart-pointer。

这样做也是有原因的:
如果接受所述 smart-pointer 的函数只是一个接受原始(观察)指针以操纵(潜在)指针的人的前线。
除了转让/共享所有权外,切勿强迫任何人使用 smart-pointer,他们可能不会用你坚持的人来管理它。

在所有其他情况下,使用 smart-pointer 意味着 转让/共享所有权 ,并避免廉价复制(只是测试它是否拥有任何东西和 reference-counting,以及两个指针副本)实际上并没有给你买任何东西。

不,如果我们谈论的是 std 智能指针。 const T & 不能 transfer/share 所有权,所以原始 non-owning T * 总是更好更有效。