浅谈malloc/free和new/delete区别

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是库函数,只能够进行申请释放内存,不能够在申请的内存后自动构造对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值