先说new和malloc:
new的底层也是通过malloc来开辟内存的,new比malloc多一项功能,就是开辟完内存,还可以进行初始化:
int *p=new int(10);
Test *p=new Test();
第一条语句是new的基本操作,10代表开辟整型内存的初始值。
第二条语句会在堆上开辟Test类型的一块内存,同时构造出一个对象。
以上两条malloc均办不到。
new开辟内存失败抛出bad_alloc类型的异常,要捕获异常才能判断内存是否分配成功。而malloc内存开辟失败返回的是NULL指针。
再谈谈delete和free:
delete比free多一项功能,就是不仅可以释放内存,还可以析构指针指向的对象。
还有一点要补充:
new和delete不仅仅是运算符,它们实际上是运算符重载函数的调用,对应的函数名是operator new和operator delete,可以在全局或者类的作用域中提供自定义的new和delete运算符的重载函数,以改变默认的malloc和free内存开辟释放行为。