【发布时间】:2011-02-03 19:51:47
【问题描述】:
大多数时候,STL 迭代器是 CopyConstructable,因为一些 STL 算法需要这样做来提高性能,例如 std::sort。
然而,我一直在做一个宠物项目来包装 FindXFile API (previously asked about),但问题是不可能围绕这个 API 实现可复制的迭代器。查找句柄不能以任何方式复制——DuplicateHandle 明确禁止将这些类型的句柄传递给它。而且,如果您只是维护对查找句柄的引用计数,那么任何副本的单个增量都会导致所有副本的增量 - 显然这不是副本构造的迭代器应该做的事情。
由于我无法满足这里对迭代器的传统复制构造要求,是否值得尝试创建“STL 风格”迭代器?一方面,创建一些其他枚举方法不会落入正常的 STL 约定,但另一方面,如果用户稍后尝试 CopyConstruct 它,遵循 STL 约定会使该迭代器的用户感到困惑。
两害相权取其轻?
【问题讨论】:
-
学究式地说,如果它不可复制,它就不会成为 STL 迭代器。 :)