malloc/free与new/delete
malloc/free是c/c++标准库函数,new/delete是c++运算符。new/delete可以被重载。
对于内置数据类型的对象而言,光用malloc/free完全满足动态对象的要求,此时malloc/free和new/delete完全等价。
但对于其他对象在创建后要自动执行构造函数,在销毁前要自动执行析构函数,于是运算符new/delete可以产生了,不要企图用malloc/free完成动态内存的管理。
malloc只关心分配内存的大小,不关注类型,调用free(p)后,p不会自动赋值为NULL,连续两次非NULL指针调动两次free()会导致程序运行出错。new内置了sizeof、类型转换和类型安全检查。
new/delete的功能完全覆盖了malloc/free,但由于有时调用c函数的需要,malloc/free没被淘汰。