标准迭代器操作是否允许抛出?

Mar*_*tin 5 c++

考虑一个标准迭代器,它需要为遍历数据结构分配内存.如果无法分配内存,标准是否允许迭代器抛出异常?例如,考虑树数据结构的输入迭代器.在这种情况下,要遍历树,您必须添加并维护指向每个节点的父节点的指针(这将减慢不需要这样的指针的操作,如树上的插入/擦除/查找)或使用堆栈帮助迭代器存储指向遍历节点的指针.在这种情况下,虽然推进堆栈可能会增长,直到没有更多的空闲内存并且迭代器被迫抛出.

Jar*_*Par 5

是的,允许C++中的迭代器方法抛出,并且正如您所指出的那样在某些情况下可以抛出.

C++中唯一不能抛出的函数类是析构函数.实际上这只是按照惯例(因为它使得某些操作几乎不可能正确完成).析构函数可以抛弃,让它们这样做非常糟糕.

可以标记各个功能throw()以防止它们抛出.