std :: shared_ptr迭代器

时间:2012-07-06 12:00:09

标签: c++

我有一个遍历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。

1 个答案:

答案 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(); }