此问题已经在这里有了答案:
Class example
{
};
int main()
{
Example* pointer1 = new example();
Example* pointer2;
pointer2 = pointer1;
delete pointer1;
}
我应该删除pointer2吗?我认为它在堆栈中,不需要删除。
删除指针告诉操作系统,程序不再需要该指针所在位置的内存。请记住,指针只是指向要放置在RAM中的整数。通过执行pointer2 = pointer1
,您仅复制整数,而不会移动任何内存。因此,通过删除第一个指针,因为第二个指针指向相同的位置,所以不需要删除它。
简短的回答:否
pointer1
和pointer2
都是存在于堆栈中的指针。 new Example
在堆上分配类型为Example
的新对象,其内存地址存储在pointer1
中。当您执行delete pointer1
时,您将释放在堆上分配的内存。由于pointer1
和pointer2
都在delete
调用时都引用了相同的内存位置,因此它也不必为delete
d,实际上,这将是未定义的行为,并且可能导致堆损坏或您的程序崩溃。
[在此结束时,pointer1
和pointer2
仍都指向相同的内存块,实际上都不是nullptr
。