删除C++中的操作

Lin*_*ing 3 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; 
Run Code Online (Sandbox Code Playgroud)

Dan*_*_ds 11

所以删除指针变量ptr或删除指向的内存ptr?

内存指出,ptr删除(即标记为空闲-取决于implemetation内存可能具有一定的图案被覆盖以及内容可能仍然存在,但正如@JonTrauntvein还提到, -它应该永远之后访问删除).

指针本身不会改变并且仍然包含相同的值(即它指向的内存地址),但是删除后将指针置是一个好习惯,即ptr = NULL;.

这个内存是在堆上分配的,new int并且应该总是被释放delete.


int *ptr = new int; 
Run Code Online (Sandbox Code Playgroud)

- >在堆上分配内存 - 数量:sizeof(int)- ptr指向该内存位置.

*ptr = 7;  
Run Code Online (Sandbox Code Playgroud)

- >将值7放在分配的内存中.

delete ptr; 
Run Code Online (Sandbox Code Playgroud)

- >已分配的内存(包含7)被删除(即标记为免费用于其他用途).prt仍然指向释放的内存位置.访问它是无效的,因此指针应设置为NULL.

  • 在调用`delete`之后,指针变量`ptr`仍然具有相同的值,它不再指向`int`. (2认同)
  • 无法保证删除调用之前指向的内存不会受删除操作符的影响.某些实现(例如visual c ++调试运行时库)将使用可识别的模式覆盖内存,这有时有助于识别您何时尝试访问已删除的内存. (2认同)