区别:
1、new自动计算需要分配的空间,而malloc需要手工计算字节数;
2、new是类型安全的,而malloc不是,比如:int* p = new float[2]; // 编译时指出错误
int* p = (int*)malloc(sizeof(float)); // 编译时无法指出错误
(new内置了sizeof、类型转换和类型安全检查功能)
4、malloc/free要库文件支持,new/delete则不要。
联系:
new/delete的功能完全覆盖了malloc/free,为什么C++还保留malloc/free呢?因为C++程序经常要调用C函数,而C程序只能用malloc/free管理动态内存。如果用free释放“new创建的动态对象”,那么该对象因无法执行析构函数而可能导致程序出错。如果用delete释放“malloc申请的动态内存”,理论上讲程序不会出错,但是该程序的可读性很差,所以new/delete、malloc/free必须配对使用。
另外,若指针p为NULL,那么多次delete或者free没有问题,否则多次释放内存导致运行出错。