[英]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.