共享指针取消引用错误

Shared pointer dereferencing error

Java 这家伙试图让我了解 C++,特别是 共享指针 。我正在使用点云库来做一些表面工作。 PCL 库包含 IndicesPtr,根据文档,它是 std::vector.

上的 共享指针

如何从指针访问向量?我尝试使用

取消引用
pcl::IndicesPtr sample(new std::vector<int>());
...
for (int i = 0; i < *sample.size(); i++) { ... }

根据此处的文档 https://theboostcpplibraries.com/boost.smartpointers-shared-ownership。编译然后给我错误

error: no member named 'size' in 'boost::shared_ptr<std::__1::vector<int, std::__1::allocator<int> > >'; did you mean to use '->' instead of '.'?
    for (int i = 0; i < *sample.size(); i++) {

我做错了什么?

它应该是 (*sample).size() 因为 operator . 比解引用 operator * 有更高的优先级或者只是 sample->size().

根据 operator precedenceoperator. 的优先级高于 operator*。所以 *sample.size()*(sample.size()) 相同。这就是编译器试图告诉您不能直接在 boost::shared_ptr 上调用 size() 的原因。

您可以添加括号来明确指定优先级,例如(*sample).size();或者按照编译器的建议,将其更改为 sample->size().