delete p、delete []
时间: 2023-10-20 08:29:12 浏览: 47
这两个关键字都是 C++ 中用于释放内存的关键字,但是它们的使用场景不同。
- delete p:用于释放通过 new 关键字创建的单个对象的内存。其中,p 是指向该对象的指针。例如:
```
int* p = new int; // 申请一个 int 类型的空间
*p = 10; // 给该空间赋值
delete p; // 释放该空间
```
- delete []:用于释放通过 new[] 关键字创建的数组的内存。其中,[] 中指定了数组的大小。例如:
```
int* p = new int[10]; // 申请一个包含 10 个 int 类型元素的数组
for (int i = 0; i < 10; i++) {
p[i] = i;
}
delete[] p; // 释放该数组
```
需要注意的是,使用 delete 和 delete [] 时一定要确保指针指向的空间是动态分配的,否则会发生未定义的行为。同时,释放内存后,应将指针置为 nullptr,以避免悬空指针。
相关问题
delete p之后,p指向
在C++中,`delete`是一个用于释放动态内存的运算符,当你调用`delete p`时,假设`p`是一个指向动态分配的内存(如`new`操作创建的对象)的指针,这个操作会执行以下动作:
1. 首先,`delete`会对指针所指向的对象进行析构(destructor)。析构函数是一个特殊的方法,用于清理对象占用的资源,比如关闭文件、释放锁等。
2. 然后,`delete`将删除该内存块,使得`p`不再指向任何有效内容。此时,`p`被标记为无效(dangling pointer),它不再是有效的内存地址。尝试使用这个已经删除的指针访问内存可能会导致未定义的行为,比如程序崩溃。
delete p怎么调用函数的
delete p是C++中释放动态分配内存的方法。当我们使用new来动态分配内存时,需要在使用完之后使用delete来释放内存,避免内存泄漏。调用delete的方式如下:
```
delete p;
```
其中p是指向动态分配内存的指针。需要注意的是,只能使用delete释放使用new动态分配的内存,不能使用delete释放指向栈上分配内存的指针。否则会导致程序崩溃。
在调用delete之前,如果p指向的对象有析构函数,析构函数会被调用。如果p指向的对象没有析构函数,delete仍然可以正确释放内存。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)