首先应当明确的是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。
欢迎大家批评指正!