C语言和C++中动态分配内存的区别 new和malloc

C++中的new运算符在功能上类似于C语言中的malloc函数。它们都用于动态分配内存。但是,它们之间也存在一些细微的差异:

int *p=new int ;//创建int类型变量吗,new的结果是int*类型,将结果赋予p;
int *p=new int(10);//初始化了10;
int *p=new int[1100];在堆里创建了1100个int类型的数组;
delete p;
delete[] p;//释放内存

int *p=NULL;
int MAX_N=10;
p=(int*)malloc(sizeof(int)*n);
free(p);//释放内存
  1. new需要指定数据类型:new运算符会根据所需的数据类型来分配内存空间,并返回适当类型的指针。而malloc函数则无法自动识别所需的数据类型,因此需要显式地指定所需内存的大小。

  2. new调用构造函数:如果动态分配的内存是一个类对象,则使用new将自动调用该类的构造函数初始化该对象。malloc仅分配内存空间,不会进行任何初始化操作

  3. new抛出异常:如果new无法分配所需的内存空间,它将引发std::bad_alloc异常。而malloc在失败时返回空指针(NULL)

  4. deletedelete[]与析构函数:使用new分配的内存应该使用对应的deletedelete[]来释放,以调用适当的析构函数做必要的清理工作。而使用malloc分配的内存应使用free函数释放,它不会调用任何析构函数。

在C++中,建议尽可能使用newdelete,特别是在处理类对象时,因为它们提供了更好的类型安全性和语言特性的支持。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

KNeeg_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值