C++中new/delete和malloc/free的区别和联系

类型不同

new/delete是C++中的操作符,它调用的分别为赋值运算符重载operator new()和operator delete();

void *operator new(size_t);     //allocate an object
void *operator delete(void *);    //free an object

void *operator new[](size_t);     //allocate an array
void *operator delete[](void *);    //free an array

而malloc和free是标准库函数,需要头文件stdlib.h支持。

void* malloc(size_t size)//参数代表字节个数
void free(void* pointer)//参数代表内存地址

事实上,new/delete底层是基于malloc/free来实现的

功能上

都是分配和释放内存空间,但new在为对象分配内存空间时,可以自动调用构造函数,delete也可以自动调用析构函数。而malloc和free只是为变量分配和释放内存。

使用上

  1. malloc的返回值为void * (无类型指针,可以指向任意类型的数据),必须强制类型转换为对应的类型指针,而new是直接返回对应类型的指针

  2. malloc本身并不知道申请的内存是什么类型,它只关心内存的总字节数,所以需要先使用sizeof计算需要分配的内存空间大小,这也是为什么需要强制转换的原因。而new是由编译器自己计算。

  3. new 可以在分配内存的同时赋初值。

  4. new、delete和new[]、delete[]必须配对使用

  5. malloc开辟内存时返回内存地址要判空,因为若内存开辟失败,则会返回空指针NULL;而new不用判断,因为内存分配失败时,它会抛出bac_alloc异常,可以使用异常处理机制。

  6. 无论释放几个空间大小,free只传递指针,多个对象时delete需加[]

  7. 对于malloc分配内存后,若在使用过程中内存分配不够或太多,这时可以使用realloc函数对其进行扩充或缩小,但是new分配好的内存不能这样被直观简单的改变;

int *a = (int *) malloc(sizeof(int));
int *b = new int;
int *c = new int(666);

在这里插入图片描述
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SOC罗三炮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值