创建不存储value_type的输入迭代器

Crafting an InputIterator that does not store the value_type

本文关键字:输入 迭代器 type 存储 value 创建      更新时间:2023-10-16

我正在创建一个InputIterator建模的类型。 在我的应用程序中,"跳过前十万个元素"是一件合理的事情,并且创建value_type的成本很高,因此我希望我的迭代器仅在取消引用时创建value_type,而不是在递增时创建。

我可以轻松地按值返回operator* value_type。 但我不知道该怎么办operator->. 如果我的迭代器不存储value_type,如何返回指针? 我害怕一辈子的问题,不想被烧伤。

我曾考虑过不提供operator->,但那样我就不会有一个完整的InputIterator

我相信从

迭代器的operator->按值返回代理对象是可行的。 代理将具有单个value_type数据成员,并且其自己的operator->返回指向该数据成员的指针。

代理对象的生存期与任何其他按值返回对象相同(如我的 operator* 计划),因此尽管我确实有一个指向临时的指针,但在这些情况下,它会在销毁代理对象之前被消耗。