malloc、free和new、delete的区别

首先应当明确的是malloc 和free搭配使用,new和delete搭配使用,最好搭配使用否则容易造成内存泄露!

malloc/free 是在C语言头文件<stdlib.h>中定义的原型为:

void * malloc(size_t size): 动态配置内存,大小由size决定,返回值成功时为任意类型指针,失败时为NULL。

void  free(void *ptr)释放动态申请的内存空间,调用free()后ptr所指向的内存空间被收回,如果ptr指向未知地方或者指向的空间已被收回,则会发生不可预知的错误,如果ptr为NULL,free不会有任何作用。

两个组合具有以下区别:

1. malloc和free是C语言中的标准库函数,new和delete是C++中的运算符。所以从这一点上来说new/delete组合具有比malloc/free组合更高的执行效率。

2. malloc和new都申请内存空间。但是malloc函数只负责申请一定大小的空间不初始化,而new操作符在申请一定大小的空间之后会调用类的构造函数进行初始化。类似的,free函数会释放malloc申请的空间,而delete操作符在释放new申请的地址空间之前会执行对象的析构函数。

3.malloc和free返回void类型指针,new和delete直接带具体类型的指针。

4.malloc/free只适合用于int、char、结构体等基本数据类型,new/delete适合包括类在内的所有数据类型。单从这一点来看new/delete的功能完全覆盖了malloc/free的功能。C++中之所以还保留malloc/free函数的用法是为了调用C函数时的兼容。

C++中对象在创建的时候要自动执行构造函数,在消亡之前要自动执行析构函数。所以应该把自动执行构造函数和析构函数的重任交给new和delete。


欢迎大家批评指正!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值