new和malloc的不同点

new和malloc都是可以用来动态内存分配,但楼主在多次实习面试中都被问到,以前学习时并没引起注意,所以上网/看书回顾了这部分知识。自己再整理了一下。

new和malloc的不同点

  1. malloc是c/c++的标准库函数,而new是c++的运算符。
  2. malloc和new申请内存空间时,分配成功两者都是返回指向堆里面的一块内存;两者的区别在于分配失败的时候。对于malloc来说,分配失败会返回一个空指针;对于new来说,分配失败返回值有两种,一种是申请时没有申明nothrow则返回空指针(如 A a =new A),另一种是申请时申明nothrow则抛出std::bad_alloc异常
  3. new返回指定类型的指针,并且可自动计算内存大小;malloc需要人工计算内存分配,并且返回需要强制转换。什么意思呢,我举个例子
    //动态分配一个数组
    int* p = new int[100];
    int* q = (int*)malloc(sizeof(int)*100);
    /*同样是分配长度为100的整型数组,malloc需要先计算整型的大小再算上100得到最终申请的大小,而且malloc原型为void *malloc(unsigned int num_bytes)返回是void*指针,void* 表示未确定类型的指针。C,C++规定,void* 类型可以强制转换为任何其它类型的指针。*/
  4. malloc只能进行内存分配,而不对所得内存初始化;new既可以分配内存,也可以进行初始化(即调用该类型的构造函数)
int* p = (int*)malloc(sizeof(int));//malloc不会初始化
	printf("%d\n", *p);
	int* q = new int;//这样new也没有初始化
	printf("%d\n", *q);
	int* a = new int();//调用int的无参数构造函数
	printf("%d\n", *a);
	int* b = new int(10);
	printf("%d\n", *b);//答案在下方

                

new和malloc使用注意

  1. 申请内存空间后,都必须检查是否分配成功(如 if(p!=NULL))
  2. 不再使用时,记得释放(malloc分配内存只能由free释放;new分配内存只能由delete释放),并且把该指针指向NULL
  3. 除了空指针可以释放多次,其余只能释放一次,释放多次会出现异常
  4. new/delete的功能完全覆盖malloc/free,但由于c++常调用c函数,c函数只能用malloc/free。所有malloc/free依旧保留,并没有废除

有什么不对的,还请大家指出!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值