我有一个问题。我们能否直接获取共享指针所指向的对象?还是应该通过get()
调用来获取底层的原始指针,然后访问相应的对象?
我有一个问题。我们能否直接获取共享指针所指向的对象?还是应该通过get()
调用来获取底层的原始指针,然后访问相应的对象?
获取指向由 shared_ptr
指向的对象的引用有两种方法。假设您有一个名为 ptr
的 shared_ptr
变量。您可以通过使用 *ptr
或 *ptr.get()
来获取引用。这两者应该是等价的,但第一种方式更受青睐。
原因在于,您实际上是在模拟一个裸指针的解引用操作。表达式 *ptr
表示“获取由 ptr
指向的数据”,而表达式 *ptr.get()
表示“获取由包含在 ptr
中的裸指针指向的数据”。显然,第一种表达更清楚地描述了您的意图。
另一个原因是 shared_ptr::get()
旨在用于实际需要访问裸指针的情况。在您的情况下,您并不需要它,因此不要请求它。跳过整个裸指针的内容,继续在更安全的 shared_ptr
环境中生存。
上方(或下方,具体取决于排序方式)的Ken的回答非常好。我没有足够的声望来发表评论,否则我会发表评论。
我想补充一点,您也可以直接在shared_ptr
上使用->
运算符来访问它所指向对象的成员。
boost文档提供了很好的概述。
现在C++11已被广泛采用,应优先选择std::shared_ptr
而不是Boost版本。请参见此处的取消引用运算符。