相同点
都可用于内存的动态申请和释放
不同点
- malloc是C/C++语言标准库函数 new是C++运算符
- malloc需要手动计算分配空间大小 new自动计算
class A{...} A * ptr = new A; A * ptr = (A *)malloc(sizeof(A)); //需要显式指定所需内存大小sizeof(A);
- malloc需要库文件支持 new不用
- malloc仅仅分配内存空间,free仅仅回收空间,并不具备调用构造函数和析构函数的功能;new和delete出来分配回收功能之外,还会调用析构函数和构造函数
- malloc返回的是void类型指针,必须进行类型转换;new返回的是具体类型指针
int main(int argc, char *argv[]) { A* a = new A(); cout << "a的数值:" << a->val << endl; delete a; A* aa = (A*)malloc(sizeof(A)); free(aa); system("pause"); return 0; }
为什么有了malloc,还有要new
在对非基本数据类型的对象使用的时候,对象创建的时候还需要执行构造函数,销毁的时候要执行析构函数。malloc/free是库函数,是已经编译的代码,所以不能把构造函数和析构函数的功能强加给malloc/free,所以new/delete是必不可少的。