两者的相同之处
1、它们
都可以申请动态内存和释放内存。C++中申请动态内存和释放内存用new/delete或者malloc/free都可以,而且它们的存储方式相同。
2、
new与malloc动态申请的内存都位于堆中,无法被操作系统自动收回,要有相应的delete或者free来释放空间;对于内置数据类型,如int、char型,其效果是一样的。
两者的区别
1、
类型不同
malloc/free是C/C++的
标准库函数,在C中需要头文件<stdlib.h>的支持;new/delete是C++的
运算符。对类的对象而言,malloc/free无法满足动态对象的要求,对象在创建的 同时要自动执行构造函数,对象消亡前要自动执行析构函数。
2、
自动计算空间
new能
自动计算所需的内存空间,而malloc需要
手工计算字节数,然后在返回后强制转换为实际的指针类型。例如,int *p1 = new int[2]; int *p2 = malloc(2 * sizeof(int));。
3、
返回类型
new成功分配内存
返回具体类型的指针。malloc成功分配内存
返回void类型指针,C/C++规定,void类型可以强制转换为任何其它类型的指针。
void* 表示未确定类型的指针,更明确的说是指申请内存空间时还不知道用户是用这段空间来存储什么类型的数据。
extern void *malloc(unsigned int num_bytes);
说明:分配长度为num_bytes字节的内存块。如果分配成功则返回指向被分配内存的指针,
分配失败