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

时间:2016-07-07 23:06:51

标签: c++ reference iterator

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

我正在避免使用STL,因为我是一个嵌入式C人员,并且不太了解STL,不能相信自己用它来编写自定义容器和迭代器。

如果有人试图尊重我的迭代器(使用(* it).Whatever()),当它是一个接一个的时候,我得到一个段错误。这是预期的,因为在内部它是一个NULL指针。

目前我的*覆盖看起来像这样:

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

那么,我该怎么办?

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

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

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

  4. 其他。

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

    也许有人可以解释我错过了关于返回参考文献的概念。

    谢谢。

1 个答案:

答案 0 :(得分:4)

一般来说,当您取消引用end()时,STL将其自己的迭代器指定为导致UB。你也可以做到的。所以你不需要在这里做任何事情以便在各方面与STL兼容。可能还有其他方面是错误的,但这种行为完全有效。