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

标签 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. 还有其他事情。

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

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

谢谢。

最佳答案

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

关于c++ - 当有人取消引用我的 end() 迭代器时我该怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38256634/

相关文章:

c++ - 具有显式析构函数和 std::unique_ptr<> 成员的类不能在 std::vector<> 中使用?

c++ - OpenGL - VAO、VBO、IBO、glDrawElements 不显示

c++ - CMake "uuid"链接失败

c++ - qt连接服务器失败

c# - 你如何通过xaml引用一个类?

.net - 如何禁止引用 .NET DLL 类库

c++ - C/C++ 函数中的引用、指针或值语义

python - 可迭代预期的原始文本文档,接收到字符串对象

python - 计算范围内的平方数(python)

c++ - 我可以删除和删除下面的指针列表吗