new和delete的用法
创建一个对应类型的对象
int *p=new int; //创建一个int类型的对象,不做初始化
int *p=new int(); //创建一个int类型的对象并初始化为0
int *p=new int(10); //创建一个int类型的对象并初始化为()中指定值
释放这一个对象
delete p; //释放指针p所指向的对象
p=NULL; //因为释放了指针所指向的空间,最好将指针置为NULL,表明p没有指向任何对象
创建一个数组对象
int *p=new int[]; //指针p所指向的数组未初始化
int *p=new int[n]; //指针p指向长度为n的数组,未初始化
int *p=new int[](); //指针p所指向的地址初始化为0
delete [] p; //回收p所指向的数组
malloc和free
malloc函数void *malloc(size_t size);
free函数void free(void *pointer);
动态申请一块内存
int *pt=(int *)malloc(100); //指向整型的指针pt指向一个大小为100字节的内存的地址
int *pt=(int *)malloc(10*sizeof(int)); //指向整型的指针pt指向一个10个int整型空间的地址
malloc是一个函数调用,所以它在申请完一块空间后会返回一个指向该空间的指针,如果失败则会返回一个NULL。
int *p=(int *)malloc(10*sizeof(int));
if(pi==NULL) //为防止malloc没有申请到内存,在使用前先判空
printf("error!\n");
else
free (p);
new和malloc的区别
1.new/delete是C++中的关键字,需要编译器支持,而malloc/free是库函数。
2.使用new关键字申请内存时不需要指定大小,编译器会根据类型自行计算,而malloc则需要显示指定申请内存大小。
3.new成功分配时返回的是对象类型的指针,不需要类型强转,而malloc分配成功函数返回的void*类型的指针,需要用户强转为需要类型。
4.分配失败时,new会抛出异常,malloc只返回NULL。
5. new会先申请一块内存(底层使用malloc),然后调用对象的构造函数在内存上构造对象,delete先调用析构函数,然后再释放这块内存(底层使用free)。
malloc是库函数,只能够进行申请释放内存,不能够在申请的内存后自动构造对象。