2

我有一个包含以下函数的迭代器:

    ...
    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->();

或者我应该重写 operator*() 吗?

4

4 回答 4

2

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

于 2012-10-11T09:32:31.593 回答
1

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

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

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

it->foo();

T::foo()即使it.operator->()返回一个共享的指针也会调用。

于 2012-10-11T09:38:51.023 回答
1

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

于 2012-10-11T09:34:18.110 回答
0

这个解决方案怎么样?

std::shared_ptr<T> operator()(){...}  
于 2012-10-11T09:39:53.417 回答