关于new和delete,new和malloc,delete和free。我们都知道,malloc和free,称作C的库函数new和delete,称作运算符。
一、malloc的用法
1、通常用法
malloc开辟内存失败,是通过返回值和nullptr做比较,而new开辟内存失败,是通过抛出bad_alloc类型的异常来判断的
int* p = (int*)malloc(sizeof(int));//只开辟
if (p == nullptr)//由空指针和返回值来判断开辟失败
{
return -1;
}
*p = 20;//不初始化
free(p);
2、数组中用法
int* q = (int*)malloc(sizeof(int) * 20);
if (p == nullptr)
{
return -1;
}
free(p);
二、new的用法
1、通常用法
new不仅可以做内存开辟,还可以做内存初始化操作,new开辟内存失败,是通过抛出bad_alloc类型的异常来判断的
try
{
int* p1 = new int(20);//直接跟上类型,并赋予初始值
}
catch (const bad_alloc & e)
{
}
2、数组中用法
//只开辟,不初始化
int* q1 = new int[20];
//开辟了过后初始化为0
int* q1 = new int[20]();
delete[] q1;
三、new有多少种
- 第一种:在堆上开辟了内存,但是具体在堆上的那儿不清楚初值为20
int *p1 = new int(20);
- 第二种:不抛出异常版本
- int *p2 = new (nothrow) int;
- 第三种:在堆上开辟了一个常量,常量内存初始化为40
- const int *p3 = new const int(40);
- 第四种:定位new.在指定的内存上开辟四字节的内存,初始值为50
int data = 0;
int *p4 = new(&data) int(50)