pop()方法会从内存中删除对象吗



在以下代码中:

#include<iostream>
#include<queue>
using namespace std;
int main()
{
queue<int> q;
int a = 5;
q.push(a);
cout << q.front() << endl;    // 5
int* b = &(q.front());
q.pop();
cout << *b;          // Outputs 5 but why ?
}

当我将"a"传递到队列中时,是否在队列中创建了"a"的副本?当我弹出"a"时,为什么我能够取消引用指针以获得正确的输出,即5。我只知道pop((调用析构函数。

请帮忙!

调用析构函数意味着对象被销毁,程序不再使用它。这并不意味着它占用的内存现在被覆盖。简而言之:

  • 对象数据可能仍在内存中作为垃圾
  • 因此,同一内存地址的内容将取决于程序是否已经将该内存用于其他用途

由于访问垃圾数据的行为未定义,因此执行之间可能会有所不同。

最新更新