应该/可以通过函数中的引用传递智能指针

时间:2016-01-02 03:35:07

标签: c++ c++11 smart-pointers

应该/可以通过函数中的引用传递智能指针吗?

即:

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

2 个答案:

答案 0 :(得分:2)

当然,您可以通过const&传递智能指针。

还有理由这样做:
如果接受所述智能指针的函数只是一个接受用于操纵(潜在)指针的原始(观察)指针的函数的前端。
永远不要强迫任何人使用智能指针进行任何操作,只需转移/共享所有权,他们可能无法使用您坚持使用的智能指针进行管理。

在所有其他情况下,使用智能指针意味着转移/共享所有权,并避免廉价的副本(只是测试它是否拥有任何东西和引用计数,以及两个指针副本)实际上没有给你买任何东西。

答案 1 :(得分:0)

不,如果我们谈论的是std智能指针。 const T &无法转让/分享所有权,因此原始非拥有T *总是更好,效率更高。