C++ 动态内存

(一)分配内存 new

  • 很多时候,我们无法提前预知需要多少内存来存储某个定义变量中的数据,所需内存的大小需要在运行时才能确定;这时就要用到内存分配。动态分配内存存放在堆区中。

  • 单个空间的分配

      ​ 格式: 数据类型 * 指针名 = new 数据类型
    
  • 连续空间分配

      格式:数据类型 * 指针名 = new 数据类型[数量]
      如: int *p = new int[5]
    

(二)内存回收 delete

  • 单个空间的回收

      delete 指针名
    
  • 连续的空间回收

      delete []指针名
      []内什么都不写 表示释放从指针指向空间开始的连续的空间
    

(三)malloc 和 new 的区别

在 C++ 中支持 malloc / free 但是为什么我们在 C++ 中一般使用 new delete呢?

  1. new/delete 是 C++ 的关键字,malloc/free 是库函数。

  2. new 在分配空间的同时可以进行初始化,malloc 不可以。

  3. new 分配的空间如果没有初始化,默认会初始化成 0;而 malloc 分配的空间如果没有初始化,里面都是随机值,需要自己手动调用 memset 或者 bzero 函数来清 0。

  4. new 是根据类型分配的空间,而 malloc 是根据字节数分配空间的,需要自己调用 sizeof() 计算。

  5. new 是要什么类型,返回的就是什么类型的指针;而 malloc 返回的都是 void*,需要自己强转成需要的类型。

  6. new 在分配类对象空间的时候,会调用类的构造函数,malloc 不会。

  7. delete 在释放类对象空间的时候,会调用类的析构函数,free 不会。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值