malloc 与new区别和使用

简单介绍(日后完善)

当我们使用关键字new在堆上动态创建一个对象A时,比如 A* p = new A(),它实际上做了三件事:

  1. 向堆上申请一块内存空间(做够容纳对象A大小的数据) 分配对象的空间
  2. 调用构造函数 (调用A的构造函数(如果A有的话))把对象的成员进行初始化
  3. 返回正确的指针

malloc 则必须要由我们计算字节数,并且在返回后强行转换为实际类型的指针。

  1. malloc 函数返回的是 void * 类型,需要进行实际类型的类型转化。否则报错
  2. 函数的实参为 sizeof(int) ,用于指明一个整数类型需要的个数。
int *p = (int*)malloc(sizeof(int) * 100);
//分配可以放得下100个整数的内存空间。
free(p)

int *p = new int[100];
delete[] p;//一定有[]的
  • malloc/free只是动态分配内存空间/释放空间。而new/delete除了分配空间还会调用构造,析构函数进行初始化与清理(清理成员)。
  •  malloc/free需要手动计算类型大小且返回值为void*,new/delete可自己计算类型的大小对应类型的指针。
  • new/delete的底层调用了malloc/free。
  • malloc/free申请空间后得判空,new/delete则不需要。
  • new直接跟类型,malloc跟字节数个数。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值