我不明白 delete
的含义。
例如,在下面的代码中,delete ptr;
是删除了 指针变量ptr
还是删除了 ptr所指向的内存
?
int *ptr = new int;
*ptr = 7;
delete ptr;
我不明白 delete
的含义。
例如,在下面的代码中,delete ptr;
是删除了 指针变量ptr
还是删除了 ptr所指向的内存
?
int *ptr = new int;
*ptr = 7;
delete ptr;
指针变量ptr被删除还是指针ptr指向的内存被删除?
ptr
所指向的内存被删除(即被标记为可用 - 内容仍然可能存在,但根据@JonTrauntvein所提到的,根据实现方式,该内存也可能被覆盖为特定的模式 - 删除后永远不应再访问)。
指针本身
不会改变,仍然包含相同的值(即它指向的内存地址),但在删除后将指针null是一个好习惯,例如ptr = NULL;
。
这块内存是使用new int
从堆上分配的,因此应始终使用delete
释放。
int *ptr = new int;
- 在堆上分配了内存 - 数量为:sizeof(int)
- ptr
指向该内存位置。
*ptr = 7;
-> 分配的内存中存储了值为7
。
7
is stored in the allocated memory.delete ptr;
分配的内存(包含7)被释放(即标记为空闲以供其他用途)。 ptr
仍然指向该释放的内存位置。访问它是无效的,因此指针应设置为NULL
。
ptr
在调用 delete
后仍然具有相同的值,只是不再指向一个 int
。 - David Schwartz
7
,但它所占用的空间将在长期内被进一步分配重用,因此它的日子已经被数过了。 - Frédéric Hamidi