如何通过共享指针获取Object?

时间:2011-06-27 11:12:02

标签: c++ shared-ptr shared smart-pointers

我有一个查询。我们可以直接获得共享指针指向的对象吗?或者我们应该通过get()调用获取底层RAW指针,然后访问相应的对象?

2 个答案:

答案 0 :(得分:49)

您有两个选项可以检索shared_ptr指向的对象的引用。假设您有一个名为shared_ptr的{​​{1}}变量。您可以使用ptr*ptr来获取参考。这两个应该是等价的,但第一个是首选。

原因是你真的试图模仿原始指针的取消引用操作。表达式*ptr.get()读取“获取*ptr指向的数据”,而表达式ptr“获取包含在{{1}内的原始指针所指向的数据}”。显然,第一个更清楚地描述了你的意图。

另一个原因是*ptr.get()旨在用于您实际需要访问原始指针的场景中。在你的情况下,你不需要它,所以不要求它。只需跳过整个原始指针,继续生活在更安全的ptr世界。

答案 1 :(得分:15)

Ken's answer above(或以下,取决于这些是如何排序的)非常棒。我没有足够的声誉来评论,否则我会。

我想补充一点,您也可以直接在->上使用shared_ptr运算符来访问它指向的对象的成员。

boost documentation提供了很好的概述。

修改

现在C ++ 11被广泛采用,std::shared_ptr应该优先于Boost版本。请参阅解除引用运算符here