malloc/free和new/delete
(1) 属性:malloc和free是C/C++的库函数,new/delete是C++运算符;
(2) 返回类型:new操作符内存分配成功时,返回的是对象类型的指针,类型严格与对象匹配,无须进行类型转换,故new是符合类型安全性的操作符;而malloc内存分配成功则是返回void * ,需要通过强制类型转换将void*指针转换成我们需要的类型。
(3) 用法:new给新类型对象分配内存时会调用相关对象的构造函数,而malloc不会调用构造函数;delete将调用该实例的析构函数,然后调用类的delete释放内存,而free不能调用析构函数。
(3) 分配失败:new内存分配失败时,会抛出bac_alloc异常。malloc分配内存失败时返回NULL。
(4) new自动计算需要分配的空间,而malloc需要手工计算字节数。
(5) malloc/free需要库文件支持(#include<stblib.h>),new/delete则不需要。
Q:malloc能给类对象分配内存吗?
A:不能。因为生成类对象的时候,编译器要调用构造函数,而malloc是c语言的库函数,不能调用构造函数,而new是cpp的符号,cpp的编译器可以识别并且使用它来构造。