new/delete 和malloc/free的区别是什么

在C++中,申请动态内存与释放动态内存,用new/delete和malloc/free都可以。而且存储方式相同,new 与 malloc 动态申请的内存都位于堆中,不能自动回收,需要对应的delete和free手动释放。malloc/free是C/C++语言的标准库函数,而new ,delete是C++的运算符,对于类的对象而言,malloc/free满足不了动态对象的要求,对象在创建的同时要自动执行构造函数,释放的同时要执行析构函数。new/delete可以执行构造函数和析构函数,而malloc和free则不行。主要区别如下:

1,new能够自动计算需要分配的内存空间,而malloc需要手工计算字节数。如 int *p1 = new int [2], int *p2 = malloc(2*sizeof(int)).

2,  new与delete带具体类型的指针,malloc与free返回void类型的指针。

3,new是类型安全的,而malloc不是。

4,new调用构造函数,malloc不能;delete调用析构函数,free不能。

5,malloc/free需要库文件stdlib.h支持,new/delete不需要库文件支持。

sizeof() 属于C中的运算符,而strlen()则属于string中的函数,可以和上面对比记忆。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值