![](/img/trans.png)
[英]ostream::operator<< is not working with operator-> in 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.