c++中的new和delete
2020-05-19 本文已影响0人
潘雪雯
用法。
- new初始化
new int;开辟一个存放整数的存储空间,返回一个指向该存储空间的地址(即指针)。
new int(100);开辟一个存放整数的存储空间,并指定该整数的初值为100,返回一个指向该存储空间的地址(即指针)。
int *p = (int *)malloc(sizeof(int));
*p = 10;
int *p2 = new int;//分配基础类型
*p = 20;
int *p3 = new int(30);
new char[10];开辟一个存放字符数组的存储空间,返回首元素的地址(即指针)
new int[5][4];开辟一个存放二维整型数组的空间,返回一首元素的地址(即指针)
int *p = (int *)malloc(sizeof(int) * 10);
p[0] = 1;
free(p);
//c++分配数组
int *pArray = new int[10];
pArray[1] = 2;
delete [] pArray;//数组不要把[]忘记
*float p = new float(3.14159)开辟一个存放单精度数的空间,并指定该实数的初值为3.14159,将返回该空间的地址(即指针)赋给指针变量p。
-
new和delete运算符使用格式:
image.png - 用new分配数组空间时不能指定初值,用户可以根据指针的值判断分配空间是否成功。
- 执行delete运算符时,在释放内存空间之前,自动调用析构函数,完成相关善后清理工作。
new、delelte和malloc、free的不同点
- c语言中malloc和free是库函数,
c++中new和delete是运算符 - malloc不会调用类的析构函数,new能执行类的构造函数
free不会调用类的析构函数,delete能执行类的析构函数 - new和delete操作符分配内存成功时返回对象类型的指针,分配失败时会抛出bac_alloc异常,不会返回NULL。
- 申请的内存所在位置: new从自由存储区上为对象动态分配内存,malloc函数从堆上动态分配内存
- new操作符申请内存分配时无须指定内存块的大小,编译器会根据类型信息自行计算,而malloc需要显示的指出所需内存的尺寸malloc(sizeof(A))