C++中的删除操作
delete operation in C++
我不明白delete
是什么意思。
例如下面的代码中,delete ptr;
所以pointer variable ptr
被删除了还是the memory ptr pointed to
被删除了?
int *ptr = new int;
*ptr = 7;
delete ptr;
so the pointer variable ptr is deleted or the memory ptr pointed to is
deleted?
ptr
指向的内存已删除(即标记为空闲 - 内容可能仍然存在,但是,正如@JonTrauntvein 还提到的那样,根据实现情况,内存也可能会被某种模式覆盖——删除后永远不应访问它)。
指针本身没有改变,仍然包含相同的值(即它指向的内存地址),但是[=35=是一个好习惯]null删除后的指针,即ptr = NULL;
.
此内存已通过 new int
在堆上分配,应始终通过 delete
释放。
int *ptr = new int;
-> 内存在堆上分配 - 数量:sizeof(int)
- ptr
指向该内存位置。
*ptr = 7;
-> 值 7
被放置在分配的内存中。
delete ptr;
-> 分配的内存(包含 7)已 删除 (即标记为空闲以供其他用途)。 ptr
仍然指向那个释放的内存位置。访问无效,所以指针应该设置为NULL
.
我不明白delete
是什么意思。
例如下面的代码中,delete ptr;
所以pointer variable ptr
被删除了还是the memory ptr pointed to
被删除了?
int *ptr = new int;
*ptr = 7;
delete ptr;
so the pointer variable ptr is deleted or the memory ptr pointed to is deleted?
ptr
指向的内存已删除(即标记为空闲 - 内容可能仍然存在,但是,正如@JonTrauntvein 还提到的那样,根据实现情况,内存也可能会被某种模式覆盖——删除后永远不应访问它)。
指针本身没有改变,仍然包含相同的值(即它指向的内存地址),但是[=35=是一个好习惯]null删除后的指针,即ptr = NULL;
.
此内存已通过 new int
在堆上分配,应始终通过 delete
释放。
int *ptr = new int;
-> 内存在堆上分配 - 数量:sizeof(int)
- ptr
指向该内存位置。
*ptr = 7;
-> 值 7
被放置在分配的内存中。
delete ptr;
-> 分配的内存(包含 7)已 删除 (即标记为空闲以供其他用途)。 ptr
仍然指向那个释放的内存位置。访问无效,所以指针应该设置为NULL
.