标准库函数与运算符
malloc/free是C++/C 的标准库函数,new/delete是C++的运算符。对于非内部数据类型对象而言,只使用malloc/free无法满足动态对象的要求。对象在创建的同时自动执行构造函数,消亡之前要自动执行析构函数。malloc/free不在编译器控制范围内,不能将构造函数和析构函数强加于malloc、free。
malloc/free
只申请内存的大小,对象的初始化是需要额外进行的。malloc/free 最需要的注意的就是申请的字节数的大小和指针类型转换。
new /delete
使用时不需要指定大小,因为内置了sizeof,类型转换和类型安全检查功能,对于非内部数据类型的对象而言,new在创建动态对象的同时完成了初始化工作。
对于内部数据类型对象,malloc和new的做的事情是等价的,但是对于动态对象的内存管理还是使用new/delete 为妙。new/delete完全覆盖了malloc/free的功能,但是malloc/free不能弃用,因为C++很多时候需要调用C的函数,而C的内存管理依赖于malloc/free。