栈帧最主要的作用就是存储局部数据
C语言中动态内存管理方式
C语言动态内存管理 该篇详细的讲述了C语言动态内存管理的使用,不太懂的小伙伴可以去了解一下
C++中动态内存管理方式
首先,C语言内存管理的方式在C++中可以继续使用。但有些地方就无能为力而且使用起来比较麻烦,因此C++又提出了自己的内存管理方式:通过new和delete操作符进行动态内存管理。
new和delete操作内置类型
1. 动态申请单个某类型的空间
语法结构
new 类型
//C++写法
int* p1 = new int; //动态申请一个int类型的空间
delete p1; //销毁
//二者是等价的
//C语言写法
int* p2 = (int*)malloc(sizeof(int)); //动态申请一个int类型的空间
free(p2); //销毁
2. 动态申请多个某类型的空间
语法结构
new 类型[数量]
//C++写法
int* p3 = new int[10]; //动态申请10个int类型的数组
delete[] p3; //销毁
//二者是等价的
//C语言写法
int* p4 = (int*)malloc(sizeof(int)* 10); //动态申请10个int类型的空间
free(p4); //销毁
3. 动态申请单个某类型的空间并初始化
//C++写法
int* p5 = new int(10); //动态申请一个int类型的空间并初始化为10
delete p5; //销毁
//二者是等价的
//C语言写法
int* p6 = (int*)malloc(sizeof(int)); //动态申请一个int类型的空间并初始化为10
*p6 = 10; //赋值
free(p6); //销毁
4. 动态申请多个某类型的空间并初始化
//C++写法
int* p7 = new int[10]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; //动态申请10个int类型的空间并初始化为0到9
delete[] p7; //销毁
//二者是等价的
//C语言写法
//动态申请10个int类型的空间并初始化为0到9
int* p8 = (int*)malloc(sizeof(int)* 10); //申请
for (int i = 0; i < 10; i++) //赋值
{
p8[i] = i;
}
free(p8); //销毁
注意:申请和释放单个元素的空间,使用new和delete操作符;申请和释放连续的空间,使用new[ ]和delete[ ]。
动态申请自定义类型的数据,new和delete会调用构造函数初始化,构析函数清理