1、返回类型的区别
new返回指定类型的指针,并且可以自动计算所需要大小。例如:
1 int *p; 2 p = new int; //返回类型为int* 类型(整数型指针),分配大小为sizeof(int);
或者,如下所示:
1 int* parr; 2 parr = new int [100]; 3 //返回类型为 int* 类型(整数型指针),分配大小为 sizeof(int) * 100;
而 malloc 则必须要由我们计算字节数,并且在返回后强行转换为实际类型的指针。
1 int* p; 2 p = (int *) malloc (sizeof(int)*128); 3 //分配128个(可根据实际需要替换该数值)整型存储单元, 4 //并将这128个连续的整型存储单元的首地址存储到指针变量p中 5 double *pd=(double *) malloc (sizeof(double)*12); 6 //分配12个double型存储单元, 7 //并将首地址存储到指针变量pd中
2、分配的内存区域
new操作符从自由存储区(free store)上为对象动态分配内存空间,而malloc函数从堆上动态分配内存。
3、new/delete是C++的操作符,而malloc/free是C中的函数。
4、new做两件事,一是分配内存,二是调用类的构造函数;同样,delete会调用类的析构函数和释放内存。而malloc和free只是分配和释放内存。
5、new建立的是一个对象,而malloc分配的是一块内存;new建立的对象可以用成员函数访问,不要直接访问它的地址空间;malloc分配的是一块内存区域,用指针访问,可以在里面移动指针;new出来的指针是带有类型信息的,而malloc返回的是void指针。
6、new/delete是保留字,不需要头文件支持;malloc/free需要头文件库函数支持。
其余具体区别,可以参考:
https://www.cnblogs.com/huhuuu/archive/2013/11/19/3432371.html