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