shared_ptr的输入迭代器

Input Iterator for a shared_ptr

本文关键字:输入 迭代器 ptr shared      更新时间:2023-10-16

我有一个迭代器,其中包含以下函数:

    ...
    T &operator*() { return *_i; }
    std::shared_ptr<T> operator->() { return _i; }
private:
    std::shared_ptr<T> _i;
    ...

如何获取指向内部存储_i的共享指针?

std::shared_ptr<Type> item = ???

我应该做:

MyInterfaceIterator<Type> i;
std::shared_ptr<Type> item = i.operator->();

还是我应该重写运算符*()?

如果可以编辑代码,则可以添加一个简单的get函数来返回内部shared_ptr!!这比直接打电话operator->要好,不是吗??

由于std通过取消引用迭代器来获取对象,我会说:

std::shared_ptr<T> operator*() { return _i; }

另外,请注意,如果您只是尝试在 T 上调用方法,则无需先获取指针,因为operator->()是链接的。这意味着

it->foo();

将调用T::foo(),即使it.operator->()返回共享的 poitner。

在迭代器方面,您必须编写operator*()来取消引用它。实际上它是你的迭代器,你可以写任何你想要的东西。但是由于C++程序员广泛使用std,最好使用operator*()因为它更易于理解。

这个解决方案呢?

std::shared_ptr<T> operator()(){...}