pop( ) 方法会从内存中删除对象吗?
does pop( ) method delete the object from the memory?
在下面的代码中:
#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() 调用析构函数。
请帮忙!
调用析构函数意味着对象被销毁,程序不再使用它。 并不意味着它占用的内存现在被覆盖了。
所以,简而言之:
- 对象数据可能仍作为垃圾在内存中。
- 因此同一内存地址的内容将取决于程序是否已经将该内存用于其他用途。
由于访问垃圾数据的行为未定义,这可能会因执行而异。
在下面的代码中:
#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() 调用析构函数。
请帮忙!
调用析构函数意味着对象被销毁,程序不再使用它。 并不意味着它占用的内存现在被覆盖了。 所以,简而言之:
- 对象数据可能仍作为垃圾在内存中。
- 因此同一内存地址的内容将取决于程序是否已经将该内存用于其他用途。
由于访问垃圾数据的行为未定义,这可能会因执行而异。