删除C ++中的操作

时间:2016-01-14 21:44:10

标签: c++ new-operator dynamic-memory-allocation delete-operator

我不明白delete的含义。

例如,在下面的代码delete ptr;中,删除pointer variable ptr或删除the memory ptr pointed to

int *ptr = new int; 
*ptr = 7;  
delete ptr; 

1 个答案:

答案 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