c++ new和malloc的区别

c++ new和malloc的区别,第1张

 详解请点击下面的链接,

https://www.cnblogs.com/ywliao/articles/8116622.html 

1.关键字不一样
new(申请空间)delete(释放空间)不用头文件
malloc(申请空间)free(释放)cstdlib
2.申请的内存位置不一样:

自由存储区是C++基于new *** 作符的一个抽象概念,凡是通过new *** 作符进行内存申请,该内存即为自由存储区。

new从自由存储区 动态分配内存
malloc从堆区创建
3.格式不一样
newmalloc
返回的类型与变量类型一致返回类型默认 void *,可以自己设置返回类型
不需要设置内存大小(自动计算)需要给出内存的大小

 new:

int *p = new int(10);
//数组
int *p1= new int[10];//开辟10个空间

malloc:   

	int * p = (int *)malloc(sizeof(int));//开辟1个
	*p = 10;
	int* p2 = (int *)malloc(sizeof(int) * 10);//开辟10个
	for (int i = 0; i < 10; i++)
	{
		p2[i] = i;
	}

释放内存时

new:

delete p;
//如果为数组时
delete[]p1;

malloc:

free(p);
4.分配内存失败时

new :会抛出异常(异常处理)bed_alloc 不会返回 NULL

malloc:会返回 NULL

5.是否调用构造和析构函数

new分配内存对象:

  1. 分配空间
  2. 调用构造函数构造对象
  3. 返回该对象指针

delete:

  1. 调用析构
  2. 用delete释放内存 

malloc不会调用构造和析构 

6.是否可以重载

new 和 delete 可以重载

malloc 和free 不可以重载

7.内存扩充
new /deletemalloc/free
不可以直接扩充可以用remalloc来直接扩充

总结:

特征new/deletemalloc/free
分配内存的位置自由存储区
内存分配失败返回值完整类型指针void*
内存分配失败返回值默认抛出异常返回NULL
分配内存的大小由编译器根据类型计算得出必须显式指定字节数
处理数组有处理数组的new版本new[]需要用户计算数组的大小后进行内存分配
已分配内存的扩充无法直观地处理使用realloc简单完成
是否相互调用可以,看具体的operator new/delete实现不可调用new
分配内存时内存不足客户能够指定处理函数或重新制定分配器无法通过用户代码进行处理
函数重载允许不允许
构造函数与析构函数调用不调用

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/673809.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-19
下一篇 2022-04-19

发表评论

登录后才能评论

评论列表(0条)

保存