0

我有一个迭代器,它遍历 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->() 运算符?

我应该如何测试迭代器是否指向 NULL,即内部共享指针是否指向 NULL。

4

1 回答 1

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(); }
于 2012-07-06T12:10:12.240 回答