我正在尝试更深入地了解新运营商。我确实理解它从堆中分配内存并返回指向内存的指针这一事实。我的问题是,一旦我得到指针并使用它来存储另一个指向另一个声明变量的指针,值复制或指向的值是如何发生的?所以例如
我声明一个变量
int x = 4;
说
int* ptr = new int;
ptr = &x;
ptr 从堆中指向一块内存。x 定义在拥有单独内存块的堆栈中。ptr 和 x 的地址相同。如果我删除 ptr,x 仍然有效,因为它仍然存在于内存中。当我说 *ptr 时,我正在寻找 ptr 指向的值,在这种情况下是 4。我的问题是 4,它在哪里。它是否存在于两个单独的内存块中。一个由 x 表示,另一个是我刚从 new 得到的。这个过程是如何发生的?4 如何在两个块之间传输,或者我错过了什么?请帮忙。
另外,当我说 ptr = &x 时,是按位复制。换句话说,我是否永远失去了刚刚通过堆访问的内存?