shared_ptr的输入迭代器
Input Iterator for a shared_ptr
我有一个迭代器,其中包含以下函数:
...
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()(){...}
相关文章:
- 如何从高性能的输入迭代器返回变体?
- 如何实现构造函数,使其仅接受使用 typeid 的输入迭代器?
- 输入迭代器是否可以仅在赋值的右侧符号上取消引用?
- 输入迭代器的相等性比较
- 取消引用的输入迭代器的地址?istream_iterator的情况
- 为什么输入迭代器在递增后会使自身失效?
- 从 std::copy 和 std::copy_n 中提取输入迭代器
- 输入迭代器 - 星号和后缀运算符
- 输入迭代器可以重复读取,而输出迭代器只能写入一次
- 使用输入迭代器再次遍历容器
- 创建不存储value_type的输入迭代器
- 输入迭代器的示例`end()`实际上表示一个past-end-end
- 输入迭代器必须具有常量解引用运算符吗
- shared_ptr的输入迭代器
- C++Spirit Boost:将输入迭代器转换为前向迭代器
- 递增可变输入迭代器是否会使旧迭代器值失效
- <algorithm>在同一输入迭代器范围内并排运行两个
- 运算符 -> 不适用于自定义输入迭代器
- 从输入迭代器获取最后一项
- 异常规范和标准输入迭代器