我不明白delete
的含义。
例如,在下面的代码delete ptr;
中,删除pointer variable ptr
或删除the memory ptr pointed to
?
int *ptr = new int;
*ptr = 7;
delete ptr;
答案 0 :(得分:11)
所以指针变量ptr被删除或者内存ptr指向的是 删除?
ptr
指向的内存已删除(即标记为免费 - 内容可能仍然存在,但正如@JonTrauntvein所提到的那样,取决于内存可以用某种模式覆盖的实现 - 删除后永远不应该访问它。)
指针本身不会改变并且仍然包含相同的值(即它指向的内存地址),但 null 是一个好习惯删除后的指针,即ptr = NULL;
。
此内存已在new int
的堆上分配,并且应始终使用delete
释放。
int *ptr = new int;
- >内存在堆上分配 - 金额:sizeof(int)
- ptr
指向该内存位置。
*ptr = 7;
- >值7
放在分配的内存中。
delete ptr;
- >分配的内存(包含7)已删除(即标记为免费用于其他用途)。 prt
仍然指向释放的内存位置。访问它是无效的,因此指针应设置为NULL
。