我有一个遍历std :: shared_ptr的迭代器。因此,operator ++将内部存储的共享指针指向下一个项目。
template<class IT>
class MyIterator
{
public:
...
MyIterator& operator++()
{
_i = ... // Call factory
return *this;
}
private:
std::shared_ptr<IT> _i;
};
我应该如何实现operator *()和operator-&gt;()运算符?
我应该如何测试迭代器是否指向NULL,即内部共享指针是否指向NULL。
答案 0 :(得分: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(); }