我们今天来学习C++中的 new 与 delete。
它们2个是C++中的关键字,作用是在free store(C语言中的堆区)中申请空间来存放数据。
存在的意义
为什么我们要在free store中去存放数据呢?
——因为free store中的生命周期是由我们程序员所控制的。
在某些时刻,我们只需要暂时性地使用一些数据。在这种情况下,如果我们把这些数据放在堆free store中,那么我们就可以在这些数据的使用结束后,立即释放这些空间,从而减去不必要的内存占用。
使用规则与实例
关键字 new 的代码示范:
#include <iostream>
using namespace std;
int main()
{
//new 用法介绍:
// 1.申请一个单位的空间:new 数据类型(初始化)
// 2.申请多个单位的空间:new 数据类型[所需单位数量]
// 3.返回值是地址,所以我们要使用指针来接收它
//
//示例:
int *p = new int(8); //1.申请一个 int 的空间,且初始化为 8
int *arr = new int[10];//使用 new 申请 10 个 int 的空间(数组)
cout << *p << endl;//打印 *p 看看我们是否申请且初始化成功
for (int i = 0; i < 10; i++)//打印 *p 看看我们是否申请且初始化成功
{
arr[i] = i;
cout << arr[i] << " ";
}
return 0;
}
运行结果:
我们刚刚提到,free store 里的空间是由我们程序员来控制生死的,我们刚刚创建了它,那么问题来了:我们该如何销毁它,把空间还给计算机呢?
——使用关键字 delete
关键字 delete 的代码示范:
#include <iostream>
using namespace std;
int main()
{
int *p = new int(8);
int *arr = new int[10];
cout << *p << endl;
for (int i = 0; i < 10; i++)
{
arr[i] = i;
cout << arr[i] << " ";
}
//现在我们使用 delete 来销毁刚刚 new 的空间
delete p;
delete arr;
//尝试再次输出
cout << *p << endl;
for (int i = 0; i < 10; i++)
{
arr[i] = i;
cout << arr[i] << " ";
}
return 0;
}
运行结果:
我们可以看到,编译器报错了。这是因为当 delete 掉刚刚 new 所申请的空间后,就无法访问该空间了。也就是说,我们已经成功把刚刚所申请的空间还给了操作系统。
标签:int,free,C++,空间,new,store,delete From: https://blog.51cto.com/xuwenda/11940328