这是合法的吗?:
Sample& sample = stack.front();
stack.pop_front();
我的计划有效。但是Sample类有boost::optional<boost::posix_time::ptime> xxx
成员,pop_front
之后,is_initialized()
返回false;
答案 0 :(得分:12)
不,这不合法。您必须获取该对象的副本,即使用
Sample sample = stack.front ()
如果您使用的是std::vector
,pop_front
调用会将元素移到后面,而您的引用会指向另一个元素(之前的第二个元素,现在是第一个元素。)
答案 1 :(得分:1)
不,当然不是。从集合中删除对象后,您的引用就无法引用。
答案 2 :(得分:1)
如果stack
基于std::deque
。 std::vector
和std::list
的行为完全相同。
根据标准:
std :: deque :: pop_front :
删除元素的迭代器和引用无效。如果该元素是容器中的最后一个元素,则过去的迭代器也将无效。其他引用和迭代器不受影响。