C++ 如果声明的指针';删除了什么?

C++ 如果声明的指针';删除了什么?,c++,pointers,C++,Pointers,在链表中,我有以下代码 Node *tmp = head; Node *del = head->next; tmp->next = del->next; delete del; del = tmp->next; 在我的代码中,我首先删除了指针del,然后将其指向tmp->next。这行得通吗?实际上并没有删除指针变量本身,只是将它指向的内存区域标记为可供将来分配使用(在调用析构函数后,但这是另一个主题)。指针变量只携带一个地址。即使删除指针变量也可以,但它指向内存中已释

在链表中,我有以下代码

Node *tmp = head;
Node *del = head->next;
tmp->next = del->next;
delete del;
del = tmp->next;

在我的代码中,我首先删除了指针
del
,然后将其指向
tmp->next
。这行得通吗?

实际上并没有删除指针变量本身,只是将它指向的内存区域标记为可供将来分配使用(在调用析构函数后,但这是另一个主题)。指针变量只携带一个地址。即使删除指针变量也可以,但它指向内存中已释放的区域,因此其内容未定义


当指针变量被重新分配指向另一个内存地址时,它将与内存中旧的“已删除”部分完全无关。

您实际上并没有删除指针变量本身,您只是将它指向的内存区域标记为可供将来分配使用(在调用析构函数后,但这是另一个主题)。指针变量只携带一个地址。即使删除指针变量也可以,但它指向内存中已释放的区域,因此其内容未定义


当指针变量被重新分配指向另一个内存地址时,它将与内存中旧的“已删除”部分完全无关。

Yes………@OliCharlesworth………但调用未定义的行为!@πάνταῥεῖ: 为什么要在这里使用UB?@OliCharlesworth啊,我明白了!它只是重新分配的,而不是取消引用的。所以不,当然不是UB!这样想:你存储head的地址,删除存储在地址(不再是有效指针)的值,然后更改存储的地址(现在是有效指针);只要存储的地址有效,指针就可以安全使用。是………@OliCharlesworth………但调用未定义的行为!@πάνταῥεῖ: 为什么要在这里使用UB?@OliCharlesworth啊,我明白了!它只是重新分配的,而不是取消引用的。所以不,当然不是UB!这样想:你存储head的地址,删除存储在地址(不再是有效指针)的值,然后更改存储的地址(现在是有效指针);只要存储的地址有效,指针就可以安全使用。@cmaster-True,我添加了它。@cmaster-True,我添加了它。