当有人取消引用我的 end() 迭代器时,我该怎么办

What should I do when someone dereferences my end() iterator?

本文关键字:迭代器 我该怎么办 end 取消 引用 我的      更新时间:2023-10-16

我正在编写一个带有自定义迭代器的自定义容器类。

我之所以避免使用 STL,是因为我是一个嵌入式 C 人,对 STL 的理解不够充分,无法相信自己会用它编写自定义容器和迭代器。

如果有人试图尊重我的迭代器(使用 (*it)。无论如何() )当它是一过尾时,我得到一个段错误。 这是意料之中的,因为它在内部是一个 NULL 指针。

目前我的 * 覆盖如下所示:

Event& EventList::iterator::operator*()
{
  return * m_pBlock->GetAt(m_EventIdx);
}

那么,我该怎么办?

  1. 抛出异常? 哪一个? 不过,我试图避免例外。

  2. 放弃模拟 STL 并从我的迭代器返回指针或 NULL 指针。

  3. 保留全局静态事件实例以用作错误返回值。

  4. 别的。

我不得不说,我对返回引用的做法非常怀疑,因为没有办法返回 NULL 引用。 整个想法似乎没有经过深思熟虑。

也许有人可以解释我对返回引用的概念所缺少的是什么。

谢谢。

一般来说,STL 指定自己的迭代器在取消引用 end() 时导致 UB。 你也可以这样做。 因此,您无需在此处执行任何操作即可在各个方面与 STL 兼容。 可能还有其他方面是错误的,但这种行为是完全有效的。