malloc和new的区别,这样说更明白

从对象的角度看:

new支持对象的初始化和析构,用new创建对象会自动执行构造函数,适合用来构造C++对象

malloc 是不支持对象的初始化,适用于直接操作内存的场景

从返回类型的角度看:

new 会返回正确的指针类型,可直接用于建立C++对象

malloc 返回void* 类型,需进行类型转换

使用实例:

// 使用 new
int* ptr1 = new int(5);      // 初始化为5
delete ptr1;                 // 使用 delete 释放

// 使用 malloc
int* ptr2 = (int*)malloc(sizeof(int));
*ptr2 = 5;                   // 手动初始化
free(ptr2);                  // 使用 free 释放

从内存分配失败的情况看:

new 如果分配失败会抛出std::bad_alloc异常

malloc 如果分配失败,会返回空指针NULL,需手动检查返回是否为NULL

从重载的角度来看:

new可重载

malloc不可重载

总结

  • newdelete 更适合在 C++ 中使用,因为它们支持对象初始化和析构操作,更符合 C++ 的面对对象的需求。
  • mallocfree 是 C 语言的函数,不支持构造和析构,适用于需要在 C++ 中直接操作内存的低级场景。

 最后我说一句,以前面试问到我我不会,现在我大概说清楚了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值