【c++】——malloc和new

关于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)
发布了62 篇原创文章 · 获赞 7 · 访问量 2548

猜你喜欢

转载自blog.csdn.net/qq_43412060/article/details/105054889