繁体   English   中英

运算符-> Transistency和shared_ptr

[英]Operator-> transistency and shared_ptr

我记得在某处阅读,但是无法回忆起那个operator->是瞬时的。 它将使用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

我记得在某处阅读,但是无法回忆起那个operator->是瞬时的。

不在C ++中。 您已经发现需要双重引用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM