C++动态内存
内存分块
栈: 在函数内部声明的所有变量都将占用栈内存
堆: 这是程序中未使用的内存,在程序运行时可用于动态分配内存
new和delete运算符
new运算符
下面是使用 new 运算符来为任意的数据类型动态分配内存的通用语法:
new data-type;
其中,data-type 可以是包括数组在内的任意内置的数据类型,也可以是包括类或结构在内的用户自定义的任何数据类型;
另一示例代码如下:
double* pvalue = NULL; // 初始化为 null 的指针
pvalue = new double; // 为变量请求内存
delete运算符
当我们不需要某个之前申请的内存变量时,可以通过下面代码释放内存,
delete pvalue; // 释放 pvalue 所指向的内存
示例代码
#include <iostream>
using namespace std;
int main ()
{
double* pvalue = NULL; // 初始化为 null 的指针
pvalue = new double; // 为变量请求内存
*pvalue = 29494.99; // 在分配的地址存储值
cout << "Value of pvalue : " << *pvalue << endl;
delete pvalue; // 释放内存
return 0;
}
编译运行结果为:
Value of pvalue : 29495
数组的动态内存分配
应用场景
想要为数组申请一定大小的内存空间,该数组位于堆区;方法如下所示:
char* pvalue = NULL; // 初始化为 null 的指针
pvalue = new char[20]; // 为变量请求内存
删除的语句如下:
delete [] pvalue; // 删除 pvalue 所指向的数组
示例代码
void test()
{
//在堆区创建10个整形数据的数组
int * arr = new int[10];
for(int i = 0; i < 10; i++)
{
arr[i] = i + 100; //给数组赋值
}
for(int i = 0; i < 10; i++)
{
cout << arr[i] <<endl;
}
//释放堆区数组
//释放数组的时候,要加 [ ] 才可以
delete[] arr;
}
对象的动态内存分配
待补充…