一、分配内存
单个空间的分配
格式: 数据类型 * 指针名 = new 数据类型
连续空间分配
格式:数据类型 * 指针名 = new 数据类型[数量]
如: int *p = new int[5]
二、回收内存
回收单个空间
delete 指针名
连续的空间回收
delete []指针名
在括号内什么都不要写 表示释放从指针指向的空间开始连续的空间
三、示例代码
#include <iostream>
#include <string>
using namespace std;
int main(int argc, char const *argv[])
{
//创建单个内存
int * val_1 = new int ;
*val_1 = 10 ;
cout << "val_1 = " << *val_1 << endl;
//创建单个内存 并 初始化 可以直接在括号内写值 也可以直接在括号内写 变量
int *val_2 = new int(15);
cout << "val_2 = "<< *val_2 << endl;
int *val_3 = new int(*val_2);
cout<< "val_3 = " << *val_3 << endl;
//创建多个内存
int * arr = new int[5];
for (size_t i = 0; i < 5; i++)
{
arr[i] = i;
cout << "arr = " << arr[i] << endl;
}
//回收内存
delete val_1;
delete val_2;
delete val_3;
delete [] arr;
return 0;
}
运行结果如下:
**拓展**
new/delete 和 malloc/free 的区别
1、
new/delete
是 C++ 的关键字,malloc/free
是库函数。2、
new
在分配空间的同时可以进行初始化,malloc
不可以。3、
new
分配的空间如果没有初始化,默认会初始化成 0;而malloc
分配的空间如果没有初始化,里面都是随机值,需要自己手动调用memset
或者bzero
函数来清 0。4、
new
是根据类型分配的空间,而malloc
是根据字节数分配空间的,需要自己调用sizeof()
计算。5、
new
是要什么类型,返回的就是什么类型的指针;而malloc
返回的都是void*
,需要自己强转成需要的类型。6、
new
在分配类对象空间的时候,会调用类的==构造函数==,malloc
不会。7、
delete
在释放类对象空间的时候,会调用类的==析构函数==,free
不会。