C++ C++;新操作员分配新内存

C++ C++;新操作员分配新内存,c++,dynamic-memory-allocation,C++,Dynamic Memory Allocation,我为了好玩而运行一个小程序,遇到了一个困扰我的问题 #include <iostream> #include <string> using namespace std; struct T { int val; }; int main() { for(int i = 0; i < 2; ++i) { T *p = new T; cout << p << endl; de

我为了好玩而运行一个小程序,遇到了一个困扰我的问题

#include <iostream>
#include <string>

using namespace std;

struct T
{
    int val;
};
int main()
{
    for(int i = 0; i < 2; ++i)
    {
        T *p = new T;
        cout << p << endl;
        delete p;
    }

    T *q = new T;
    cout << q << endl;
    delete q;

    return 0;
}

它们都在同一个内存位置?

您正在打印地址后删除内存。然后内存管理器可以自由选择相同的地址来分配新内存。

编译器与操作系统一起决定将哪个内存地址分配给动态分配的内存。调用delete时,指针指向的内存地址不再被引用。因此,编译器可以自由地将相同的内存地址用于新分配。这不是我们在这个编程级别可以控制的东西。

是的,在这种情况下,它们都在同一个位置。你的程序所做的就是对同一个对象重复使用同一个内存(为什么不重复使用;每次
删除
后,如果内存管理器认为合适,它将不再被使用,并且可以用于另一个分配,在本例中,它确实如此)。编译器没有这么多。当程序运行并请求动态存储时,编译器的工作早已结束。
0x16b76d0
0x16b76d0
0x16b76d0