我需要删除堆中的哪个指针吗? [重复]

问题描述 投票:-1回答:1
    Class example
{
};

int main()
{
  Example* pointer1 = new example();
  Example* pointer2;
  pointer2 = pointer1;
  delete pointer1;
}

我应该删除pointer2吗?我认为它在堆栈中,不需要删除。

c++ dynamic-memory-allocation delete-operator
1个回答
0
投票

删除指针告诉操作系统,程序不再需要该指针所在位置的内存。请记住,指针只是指向要放置在RAM中的整数。通过执行pointer2 = pointer1,您仅复制整数,而不会移动任何内存。因此,通过删除第一个指针,因为第二个指针指向相同的位置,所以不需要删除它。


0
投票

简短的回答:否

pointer1pointer2都是存在于堆栈中的指针。 new Example在堆上分配类型为Example的新对象,其内存地址存储在pointer1中。当您执行delete pointer1时,您将释放在堆上分配的内存。由于pointer1pointer2都在delete调用时都引用了相同的内存位置,因此它也不必为delete d,实际上,这将是未定义的行为,并且可能导致堆损坏或您的程序崩溃。

[在此结束时,pointer1pointer2仍都指向相同的内存块,实际上都不是nullptr

© www.soinside.com 2019 - 2024. All rights reserved.