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

Pav*_*avi 30 c++ shared smart-pointers shared-ptr

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

Ken*_*nde 52

您有两个选项来检索对a指向的对象的引用shared_ptr.假设您有一个shared_ptr名为的变量ptr.您可以使用*ptr或获取参考*ptr.get().这两个应该是等价的,但第一个是首选的.

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

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


jak*_*kar 16

Ken的答案在上面(或下面,取决于这些是如何排序的)是很好的.我没有足够的声誉来评论,否则我会.

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

升压文件给出了一个很好的概述.

编辑

现在C++ 11被广泛采用,std::shared_ptr应该优先于Boost版本.请在此处查看解除引用操作符.