【发布时间】:2020-06-29 21:59:48
【问题描述】:
void test(int pnt)
{
int* p = &pnt; //can a pointer get deallocated?
return;
}
在这种情况下可以删除指针吗? 我不知道他们有没有。但我确实知道,如果你从免费存储中获得一个指针,它不会被释放。
【问题讨论】:
-
指针本身是一个自动变量,它的内存将在作用域结束时被释放。如果你这样做:
{ int* p = new int; }那么p的内存将被释放,但不会释放它指向的int。但是,在您的函数中,pnt也是自动的,将被自动释放。 -
@TedLyngmo 所以如果 p 指向
new int那么 p 会被删除,而不是new int? -
您只能使用
delete使用new创建的对象。delete的每次使用都必须与new的一次使用完全匹配。这里没有使用new创建对象,所以没有什么需要是deleted。你不要delete指针;你delete指针指向的对象。 -
@doggo Deleted 可能不是正确的词,但
p占用的内存将被释放,而不是int占用的内存。 -
指针只是一个普通的、旧的常规变量,具有通常的生命周期规则。它的值恰好是某个其他对象的地址(或者什么都没有,并且指针无法确定)。
标签: c++