共享指针解除引用错误

时间:2018-07-14 09:04:38

标签: c++ boost shared-ptr operator-precedence

这里的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++) {

我在这里做什么错了?

2 个答案:

答案 0 :(得分:3)

它应该为(*sample).size(),因为operator .的优先级高于取消引用operator *或仅sample->size()的优先级。

答案 1 :(得分:3)

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

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