2012-07-06 179 views
0

我有一個遍歷std :: shared_ptr的迭代器。所以operator ++將內部存儲的共享指針指向下一個項目。std :: shared_ptr迭代器

template<class IT> 
class MyIterator 
{ 
public: 
    ... 

    MyIterator& operator++() 
    { 
     _i = ... // Call factory 
     return *this; 
    } 
private: 
    std::shared_ptr<IT> _i; 
}; 

我該如何實現運算符*()和運算符 - >()運算符?

如何測試迭代器是否指向NULL,即內部共享指針是否指向NULL。

+1

爲什麼你的迭代測試,如果shared_ptr的是NULL?其他迭代器不這樣做。 – robert 2012-07-06 12:04:06

+0

你說得對。我在這裏感到困惑。相反,我應該這樣做:if(i == end())來測試它是否爲null。 – Baz 2012-07-06 12:20:59

回答

2

你應該定義在什麼情況下用戶可以遵從你的類的一個實例。通常這是「除了結束迭代器或未初始化的迭代器之外的任何事情」。

然後,您應該確保_i從不包含可以解除引用的實例的空指針。

這意味着不需要支票,因爲在這種情況下用戶不允許撥打operator*operator->。您可以添加一個進行調試,例如:assert(_i.get());

你不指定value_type是你的迭代器什麼的,但假設它是IT,可以實現:

IT &operator*() { return *_i; } 
shared_ptr<IT> operator->() { return _i; } 
// or 
IT *operator->() { return _i.get(); }