2017-01-15 19 views
3

我正在創建一個型號爲InputIterator的類型。在我的應用程序中,「跳過第一十萬個元素」是一件合理的事情,創建value_type代價昂貴,所以我希望我的迭代器只在解除引用時創建value_type,而不是在遞增時創建。製作一個不存儲value_type的InputIterator

我很容易讓operator*按值返回value_type。但我不知道該怎麼辦operator->。如果我的迭代器不存儲value_type,如何返回指針?我害怕終身遇到指向臨時的問題,不想被燒燬。

我想過沒有提供operator->,但後來我沒有一個完整的InputIterator

+0

爲什麼不在你的迭代器中存儲一個指向value_type的指針並且只在需要時才分配它?我的意思是像「懶加載」模式。 – MRB

+0

您仍然可以存儲'value_type'的對象,但只能在第一次解除引用之後創建它。用類似['std :: optional'](http://en.cppreference.com/w/cpp/experimental/optional)的東西。 – BoBTFish

+0

我在C++ 14中,所以我沒有'std :: optional'。但即使我做了,value_type也很大,並且也會使迭代器變大。 –

回答

0

我相信它會按照迭代器的值operator->的值返回代理對象。代理將有一個單一的value_type數據成員,並且它自己的operator->返回一個指向該數據成員的指針。

代理對象的生命週期與任何其他按值對象返回一樣(如我的operator*的計劃),所以雖然我確實有一個指向臨時的指針,但在這些情況下它會在代理對象被銷燬。

相關問題