如何获取共享指针所指向的对象

How to get the Object being pointed by a shared pointer?

本文关键字:对象 指针 共享 何获取 获取      更新时间:2023-10-16

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

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

这样做的原因是,您确实在尝试模拟原始指针的取消引用操作。表达式*ptr读取"Get me The data pointed by ptr",而表达式*ptr.get()读取"Get me The data pointing by The raw pointer which wrapped in ptr"。很明显,第一个更清楚地描述了你的意图。

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

Ken在上面(或下面,取决于如何排序)的回答非常好。我没有足够的声誉发表评论,否则我会的。

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

boost文档提供了一个很好的概述。

编辑

既然C++11被广泛采用,std::shared_ptr应该优先于Boost版本。请参阅此处的取消引用运算符。