我最初认为当一个队列被析构时(例如当它超出范围时),那么包含的元素应该被析构(通过调用它们各自的析构函数)。类似地,当调用 pop() 时,队列中的第一个元素被破坏,队列的大小减少 1。
但是,当我验证我的理解时,似乎不正确......我使用了这样的东西
string& str = myQueue.front();
myQueue.pop();
(其中 myQueue 是包含字符串的非空队列)。
根据 front()
规范,它应该返回对它持有的第一个元素的引用,as seen here .
这意味着,当我弹出队列时,第一个元素消失了。事实证明“str”之后仍然是一个有效的字符串!
有什么问题吗?
谢谢!
最佳答案
唯一的错误是您依赖于未定义的行为。它可能会工作,也可能会崩溃,也可能会产生下一个 Facebook。对于未定义的行为,一切皆有可能,而您得到了其中一种可能性。
关于C++ std::queue pop() 和析构函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16995195/