C++ std::queue pop() 和析构函数

标签 c++ containers std

我最初认为当一个队列被析构时(例如当它超出范围时),那么包含的元素应该被析构(通过调用它们各自的析构函数)。类似地,当调用 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/

相关文章:

azure - 网/http : TLS handshake timeout while login to Azure container registry from ubuntu

docker - 如何在不发送上下文的情况下构建docker镜像?

c++ - 不会使迭代器(和指针)失效的容器

c++ - 关于指针上 std::vector::push_back 中的 EXC_BAD_ACCESS 错误的问题

c++ - 在 Visual Studio 中,我可以在断点处绘制我的变量吗?

c++ SFML按键字符错误

c++ - 通过 protected 构造函数和静态成员函数强制使用 std::shared_ptr 以创建实例和 std::make_shared

c++ - 在某些情况下,std::is_floating_point 为 float 返回 false

使用 mysql 1.0.5 的 c++ 堆错误

c++ - 在 win7(64) 上使用 vs2013(64) 编译 zlib 出现错误