1.malloc和free: malloc与free是C++/C 语言的标准库函数,用来申请一块长度为length的整型内存空间。 注明:1.malloc的返回值类型是void* 在使用的时候要进行强制类型转换。 2. malloc不需要关心申请的内存是什么类型,只需要关心大小。 3.free它所指的内存大小是一致的,p=NULL时,无论释放多少次都无所谓,p不为NULL时,free第二次就会出错。 4.malloc是函数,无法创建对象,不会调用构造函数和析构函数。
2.new和delete: new和delete是C++的运算符,new 内置了sizeof、类型转换和类型安全检查功能。不用手动计算分配内存的大小,对于非内部数据类型的对象而言,new 在创建动态对象的同时完成了初始化工作。如果对象有多个构造函数,那么new 的语句也可以有多种形式。
3.区别:
new自动计算需要分配的空间,而malloc需要手工计算字节数
2、new是类型安全的,而malloc不是,比如:
int* p = new float[2]; // 编译时指出错误
int* p = malloc(2*sizeof(float)); // 编译时无法指出错误
new operator 由两步构成,分别是 operator new 和 construct
3、operator new对应于malloc,但operator new可以重载,可以自定义内存分配策略,甚至不做内存分配,甚至分配到非内存设备上。而malloc无能为力
4、new将调用constructor,而malloc不能;delete将调用destructor,而free不能。
5、malloc/free要库文件支持,new/delete则不要。 4.实例: char *p=(char*)malloc(sizeof(char)*10); free(p);
Obj *objects = new Obj[100]; delete []objects;