malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。
1、new 是c++中的操作符,malloc是c 中的一个函数
2、new 不止是分配内存,而且会调用类的构造函数,同理delete会调用类的析构函数,而malloc则只分配内存,不会进行初始化类成员的工作,同样free也不会调用析构函数
3、内存泄漏对于malloc或者new都可以检查出来的,区别在于new可以指明是那个文件的那一行,而malloc没有这些信息。
4、new可以认为是malloc加构造函数的执行。new出来的指针是直接带类型信息的,而malloc返回的都是void指针。
5、new和malloc虽然都是申请内存,但申请的位置不同,new的内存从free store分配,而malloc的内存从heap分配,free store(自由存储区)和heap很相似,都是动态内存,但是位置不同,这就是为什么new出来的内存不能通过free来释放的原因。不过微软编译器并没有很好的执行标准,很有可能把free store和heap混淆了,因此,free有时也可以。
6、delete时候不需要检查NULL,而free(NULL)那就麻烦大了。
new/delete的功能完全覆盖了malloc/free,C++不把malloc/free淘汰出局,是因为C++程序经常要调用C函数,而C程序只能用malloc/free管理动态内存。