2012-07-06 201 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(); }