我是否需要删除指向堆中指针的指针?

Do I need to delete pointer which pointing pointer in heap?

    Class example
{
};

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

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

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

简答:否

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

最后,pointer1pointer2 仍然指向同一个内存块,实际上都不是 nullptr