簡體   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