我可以删除以前动态分配的内存,但使用不同的指针吗? 我在C++中制作了一个链表程序。为了实现这个概念,我全局创建了一个指针“start”,指向列表的第一个元素

我可以删除以前动态分配的内存,但使用不同的指针吗? 我在C++中制作了一个链表程序。为了实现这个概念,我全局创建了一个指针“start”,指向列表的第一个元素,c++,pointers,linked-list,dynamic-memory-allocation,delete-operator,C++,Pointers,Linked List,Dynamic Memory Allocation,Delete Operator,程序完成后,我尝试删除所有动态分配的内存,以防止内存泄漏,方法是使用start和另一个本地声明的指针“p”访问连续的节点。 在这里,我使用了一个指向相同正确地址的指针,但这个指针不是用于内存分配的指针,而是像任何普通指针一样在本地声明的 我的问题是-是否可以使用指向同一位置的普通指针来删除动态分配的内存?只要指针的类型和值1与从new获得的指针的类型和值相同,就可以将其用作delete参数 此外,如果使用新[],请记住使用delete[] 1个限定符常量,不重要。请注意,还可以使用指向带有虚拟析

程序完成后,我尝试删除所有动态分配的内存,以防止内存泄漏,方法是使用start和另一个本地声明的指针“p”访问连续的节点。 在这里,我使用了一个指向相同正确地址的指针,但这个指针不是用于内存分配的指针,而是像任何普通指针一样在本地声明的


我的问题是-是否可以使用指向同一位置的普通指针来删除动态分配的内存?

只要指针的类型和值1与从new获得的指针的类型和值相同,就可以将其用作delete参数

此外,如果使用新[],请记住使用delete[]


1个限定符常量,不重要。请注意,还可以使用指向带有虚拟析构函数的基类的指针。

只要该指针的类型和值与从new返回的指针的类型和值相同,则可以将其用作delete参数

此外,如果使用新[],请记住使用delete[]


1个限定符常量,不重要。请注意,您还可以使用指向带有虚拟析构函数的基类的指针。

可以。这是有效的:

int* p = new int;
int* q = p;
delete q;
使用时的等效值:


用指针类型替换int*。之后是否将指针设置为nullptr还有待讨论。

可以。这是有效的:

int* p = new int;
int* q = p;
delete q;
使用时的等效值:


用指针类型替换int*。之后是否将指针设置为null ptr还有待讨论。

的可能重复。不要将指针视为指向地址,而应将其视为地址,并将其指向该地址处的对象。如果你打算拆毁主街35号的房子,不管地址是如何传达给你的,它仍然是同一所房子。@molbdnilo:你也能拆毁37号吗?然后日出将从数字36处可见。可能的重复不要认为指针指向一个地址,而是认为它是一个地址,它指向该地址处的对象。如果你打算拆毁主街35号的房子,不管地址是如何传达给你的,它仍然是同一所房子。@molbdnilo:你也能拆毁37号吗?然后从36号可以看到日出;删除q;同样有效,尽管我很想看到一个标准的裁判。乍一看,这似乎有悖常理,但我想康斯特说不可变的不能被删除。@Bathsheba C++14[expr.delete]/2最后一句话注意:康斯特int*q=p;删除q;同样有效,尽管我很想看到一个标准的裁判。乍一看,这似乎有点违反直觉,但我想const说immutable not不能被删除。@Bathsheba C++14[expr.delete]/2 final Note相同类型:包含虚拟析构函数的基类也一样type@UKMonkey他捏了捏,,同样的类型:同样包含虚拟析构函数的基类type@UKMonkey,掐了一下,我想问心无愧。