制作不存储 value_type 的 InputIterator
Crafting an InputIterator that does not store the value_type
我正在创建一个模型 InputIterator
。在我的应用程序中,"skip the first hundred thousand elements" 是一件合理的事情,而创建 value_type
是昂贵的,所以我希望我的迭代器仅在取消引用时创建 value_type
,而不是在递增时创建。
我可以轻松地按值使 operator*
return 成为 value_type
。但是我不知道如何处理operator->
。如果我的迭代器不存储 value_type
,我如何 return 一个指针?我害怕临时指针的终身问题,不想被烧毁。
我想过不提供operator->
,但那样我就没有完整的InputIterator
。
我相信它会根据迭代器 operator->
的值对 return 代理对象起作用。代理将有一个 value_type 数据成员,以及它自己的 operator->
return 指向该数据成员的指针。
代理对象的生命周期与任何其他 return 按值对象相同(就像我对 operator*
的计划),所以尽管我确实有一个 pointer-to-temporary,但在这些情况它在代理对象被销毁之前被消耗掉。
我正在创建一个模型 InputIterator
。在我的应用程序中,"skip the first hundred thousand elements" 是一件合理的事情,而创建 value_type
是昂贵的,所以我希望我的迭代器仅在取消引用时创建 value_type
,而不是在递增时创建。
我可以轻松地按值使 operator*
return 成为 value_type
。但是我不知道如何处理operator->
。如果我的迭代器不存储 value_type
,我如何 return 一个指针?我害怕临时指针的终身问题,不想被烧毁。
我想过不提供operator->
,但那样我就没有完整的InputIterator
。
我相信它会根据迭代器 operator->
的值对 return 代理对象起作用。代理将有一个 value_type 数据成员,以及它自己的 operator->
return 指向该数据成员的指针。
代理对象的生命周期与任何其他 return 按值对象相同(就像我对 operator*
的计划),所以尽管我确实有一个 pointer-to-temporary,但在这些情况它在代理对象被销毁之前被消耗掉。