一、分配内存
单个空间的分配
格式: 数据类型 * 指针名 = 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不会。
989

被折叠的 条评论
为什么被折叠?



