操作符 - > transistency和shared_ptr

时间:2014-03-30 09:19:22

标签: c++

我记得在某个地方读书,不记得哪里,那个操作员 - >是短暂的。它将使用operator->查看对象。直到它找到一个不是指针然后运行普通运算符的东西。在那。但是我遇到了这个问题,

考虑以下代码:

#include <boost/shared_ptr.hpp>
#include <vector>
#include <iostream>

struct Foo {
    Foo(int val) : i(val) {}
    typedef boost::shared_ptr<Foo> ptr;
    int i;
};

int main(int argc, char** argv) {
    typedef std::vector<Foo::ptr> FooVec;
    FooVec v;
    for(FooVec::iterator it = v.begin(); it != v.end(); ++it) {
        std::cout <<it->i <<std::endl;
    }
    return 0;
}

我收到此错误:

ptr.cpp: In function ‘int main(int, char**)’:
ptr.cpp:15:19: error: ‘class boost::shared_ptr<Foo>’ has no member named ‘i’
   std::cout <<it->i <<std::endl;

因为boost :: shared_ptr不是指针。我可以通过编写

来解决这个问题
std::cout <<(*it)->i <<std::endl

但是我认为这看起来更糟糕,我也尝试过std :: shared_ptr,但是遇到了同样的问题。有没有一种很好的方法来解决这个问题,还是我坚持使用(*it)->i

1 个答案:

答案 0 :(得分:0)

  

我记得在某个地方读书,不记得哪里,那个操作员 - &gt;   是短暂的。

不在C ++中。你需要像你已经发现的那样进行双重引用。