new 与 malloc 的区别

1. new/delete是c++的运算符, 而malloc/free是c语言的标准库函数,都可以用用来动态分配和释放内存。

2. 对于用户自定义对象而已,malloc只是分配空间,而new却能调用调用对象的构造函数,在delete时候调用对象的析构函数。

3. new可以认为是malloc加上构造函数的执行。new出来的指针式直接带类型信息的,而malloc返回的void*指针。

4. new/delete在实现上其实调用了malloc/free函数。

5. 用法上的不同:

malloc原型 void* malloc(size_t size);

int *p = (int *) malloc(sizeof(int) * length); 

malloc函数本身并不识别申请的内存是什么类型的,它只关心内存的总字节数。

free 原型 void free(void * memblock);

直接使用就行。


运算符 new/delete

int *p1 = (int *)malloc(sizeof(int) * length);
int *p2 = new int[length];

相比malloc简单不少,因为new内置了sizeof、类型转换和类型安全检查。

对于非内部对象,new创建动态对象的同时完成了初始化工作。

如果对象有多个构造函数,那么new语句也有多种形式。

Obj *objects = new Obj[100](1);

delete的时候要注意

delete []objects;

6.安全上的区别:

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

int* p = new float[2]; // 编译时指出错误
int* p = malloc(2*sizeof(float)); // 编译时无法指出错误

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值