动态存储分配是指在程序运行时根据需要动态地分配和释放内存空间。
C++中提供了两个关键的运算符用于动态存储分配:new
和delete
。
使用new
运算符可以在堆(heap)上动态地分配内存空间,并返回所分配内存的首地址。语法如下:
<类型>* 变量名 = new <类型>;
例如,可以使用以下语句动态地分配一个整数的内存空间:
int* ptr = new int;
使用delete
运算符可以释放通过new
分配的内存空间,以防止内存泄漏。语法如下:
delete 指针变量;
例如,可以使用以下语句释放先前分配的整数内存空间:
delete ptr;
动态存储分配允许根据程序的运行时需求动态地管理内存,它特别适用于需要灵活管理内存的情况,如动态数组、动态创建对象等。但需要注意的是,使用完动态分配的内存后,必须通过delete
释放内存,否则会造成内存泄漏。
在C++中,还可以使用动态存储分配来创建动态数组,即在程序运行时根据需要动态地分配数组的内存空间。
使用new
运算符结合方括号[]
可以创建一个动态数组,并返回数组的首地址。语法如下:
<类型>* 数组名 = new <类型>[数组长度];
例如,可以使用以下语句动态创建一个包含5个整数的数组:
int* arr = new int[5];
这将在堆上分配连续的内存空间来存储5个整数,并返回指向数组首元素的指针。
类似地,使用delete[]
运算符可以释放动态数组的内存空间。语法如下:
delete[] 数组名;
例如,可以使用以下语句释放先前创建的动态数组:
delete[] arr;
需要注意的是,释放动态数组的内存时要使用delete[]
而不是简单的delete
,以确保正确释放整个数组所占用的内存空间。
动态数组的长度可以在运行时确定,因此它具有更大的灵活性和可扩展性。然而,使用动态数组时需要负责释放内存,避免内存泄漏问题。