我可以删除以前动态分配但指针不同的内存吗?
Can I delete a memory previously allocated dynamically, but with a different pointer?
我正在用 C++ 编写链表程序。为了实现这个概念,我全局创建了一个指针'start',指向列表的第一个元素。
程序完成后,我尝试删除所有动态分配的内存以防止内存泄漏,方法是使用 start 和另一个本地声明的指针访问连续的节点 'p'。
在这里,我使用了一个指向相同正确地址的指针,但这个指针不是用于内存分配的指针,而是像任何普通指针一样在本地声明的。
我的问题是 - 是否可以通过使用指向同一位置的普通指针来删除动态分配的内存?
只要指针具有与您从 new
返回的指针相同的 类型和值 1,是的,您可以将其用作 delete
参数。
此外,如果您使用 new[]
,请记住使用 delete[]
。
1 限定符 (const
, volatile
) 无关紧要。请注意,您还可以将指向基 class 的指针与虚拟析构函数一起使用。
是的,你可以。这是有效的:
int* p = new int;
int* q = p;
delete q;
使用new[]时的等价物:
int* p = new int[123];
int* q = p;
delete[] q;
用您的指针类型替换 int*
。之后是否将指针设置为 nullptr
尚待讨论。
我正在用 C++ 编写链表程序。为了实现这个概念,我全局创建了一个指针'start',指向列表的第一个元素。
程序完成后,我尝试删除所有动态分配的内存以防止内存泄漏,方法是使用 start 和另一个本地声明的指针访问连续的节点 'p'。 在这里,我使用了一个指向相同正确地址的指针,但这个指针不是用于内存分配的指针,而是像任何普通指针一样在本地声明的。
我的问题是 - 是否可以通过使用指向同一位置的普通指针来删除动态分配的内存?
只要指针具有与您从 new
返回的指针相同的 类型和值 1,是的,您可以将其用作 delete
参数。
此外,如果您使用 new[]
,请记住使用 delete[]
。
1 限定符 (const
, volatile
) 无关紧要。请注意,您还可以将指向基 class 的指针与虚拟析构函数一起使用。
是的,你可以。这是有效的:
int* p = new int;
int* q = p;
delete q;
使用new[]时的等价物:
int* p = new int[123];
int* q = p;
delete[] q;
用您的指针类型替换 int*
。之后是否将指针设置为 nullptr
尚待讨论。