本文主要正对于malloc/free和new/delete的概念与用法区别进行阐述
###相同点
###不同点: ####概念的差别
####使用法的差别
void *malloc(size_t size);
,当使用malloc申请一块长度为length的数据类型的内存时int *p=(int*)malloc(sizeof(int)* length);
我们主要看两部分,一个是类型转换,一个是分配的空间sizeof,会发现第一,malloc在被使用时需要指明开辟的空间的指针类型,然后malloc函数本身不识别申请的内存是什么类型,它只关心内存的总字节数。free(*p)
即可正确地释放内存。而且如果 p 是NULL指针,那么free对p操作无论多少遍也不会有问题,但是如果 p 不是NULL指针,那么free对 p 执行超过一次就会出错。int *p1 = (int *)malloc(sizeof(int)* length);
int *p2 = new int[length];
因为在new内置了sizeof,类型转换和类型安全检查功能。对于非内部数据类型的对象而言,new在创建动态对象的同时完成了初始化工作。如果对象有多个构造函数,那么new的语句也可以有多种形式。但是用new创建对象数组,那么只能使用对象的无参数构造函数。
Obj *objects = new Obj[100];//创建100个动态对象。
不能写成
Obj *objects = new Obj[100](1);//创建100个动态对象的同时赋值1
delete []objects;//正确
不要写成
delete objects;//错误
这样的话,只释放了第一个元素,漏掉了99个元素。int *p=new float[2];//编译报错
但是
int *p=malloc(2*sizeof(float));//编译器无法指出错误