new malloc的区别

从使用上来说

1.malloc需要自行计算分配的字节数,平常用sizeof(Type)*num来计算,new只需要声明需要的数目即可。

2.malloc返回的是void*,需要自行再指针类型转换一下,new则不需要

3.new声明对象的时候会调用对象的构造函数(一次申请多个的时候调用默认构造),析构函数,malloc则只分配内存。

4.分配失败的时候,malloc返回空指针,new则是抛出std::bal_alloc异常,需要异常处理

5.new是C++的运算符,可以重载(全局重载和类成员重载),malloc是库函数,不能重载

6.new配delete,malloc配free,new数组配delete[] p

 

 

对一点存疑,有些地方说new分配内存是C++抽象出的自由分配区,malloc是严格的堆内存,但是测试的时候new跟malloc分配的几乎是挨着的,不知道是不是因为两句话写的挨着的原因。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
mallocnew都是用于动态分配内存的关键字,但在C和C++中有一些区别。 1. 语法: - malloc: 在C中使用,语法为`void* malloc(size_t size)`,需要手动指定要分配的内存大小,并返回一个指向分配内存的指针。 - new: 在C++中使用,语法为`new Type`或`new Type[size]`,可以自动计算所需的内存大小,并返回一个指向分配内存的指针。在分配单个对象时使用`new Type`,在分配对象数组时使用`new Type[size]`。 2. 内存分配: - malloc: 分配的内存是以字节为单位的连续块,不会自动初始化为默认值。 - new: 分配的内存可以是任意类型的对象,并且会自动初始化为默认值。使用`new Type`时,分配的内存足够容纳一个对象;使用`new Type[size]`时,分配的内存足够容纳一个对象数组。 3. 错误处理: - malloc: 如果分配失败,返回NULL指针。 - new: 如果分配失败,会抛出std::bad_alloc异常。 4. 内存释放: - malloc: 使用free函数手动释放已分配的内存。 - new: 使用delete关键字释放通过new分配的单个对象;使用delete[]关键字释放通过new[]分配的对象数组。 需要注意的是,C++中可以使用malloc和free函数来分配和释放内存,但不能在malloc分配的内存上直接调用类的构造函数和析构函数。同样,不能在使用new分配的内存上调用free函数进行释放。建议在C++中使用new和delete关键字进行动态内存分配和释放,以便正确处理对象的构造和析构过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值