在编程中,当大量的数据需要进行存储或者需要对数据进行随时申请释放的灵活操作时可以使用动态内存分配,所谓动态内存分配就是指通过特定的方法申请堆区的内存,使用动态内存分配可以让程序的操作更为灵活,如下:
#include <iostream>
using namespace std;
int main(){
int* num = new int;
*num = 1;
cout << *num << endl;
delete num;
return 0;
}
使用图中显示做出了一个int类型的指针,指针要指向地址,new int则表示在堆区申请一块int类型的地址,然后让该int指针指向此地址。
使用new可以为指针num申请到堆区内存,堆区内存近乎时无穷大的,因此在使用的时候基本不需要担心内存问题,但是堆区内存在使用完毕以后需要手动释放,否则内存会因为程序已经申请而一直被占用,导致此块内存无法被其它数据使用,从而产生内存泄漏的问题。
在使用数组的时候,每次申请的数组必须在开始就将大小固定,在这种情况下经常会出现数组没用能够完全使用,这样的话就会浪费掉内存空间,如果对内存的申请可以进行修改则会方便很多,此时,动态内存分配就可以实现。
使用new不光可以申请一快内存,还可以申请指定数量的内存,这个指定的数量可以是定值,也可以是变量,如下:
#include <iostream>
using namespace std;
int main(){
int number;
cin >> number;
int* num = new int[number];
int i;
for (i = 0; i < number; ++i){
num[i] = i + 1;
cout << num[i] << endl;
}
delete[] num;
return 0;
}
在图中,new int后有一个[],括号内填入的数字表示申请的int类型的数量,这样申请出来的内存也是连续的,与数组十分相似,在使用的时候也可以通过[]填入下标的方式来访问数据,不过原先的数组是在堆区申请内存且必须在一开始就指定大小,后面无法更改,但是使用new可以让内存的申请更为灵活,但是使用new就需要时刻注意内存的释放,最好是在申请的使用就将delete配套写上,若是申请的单块内存就用delete释放,若是申请的多块内存则用delete[]来释放。