Skip to content
On this page

CPP_动态内存分配和回收


标签:CPP/基础  

分配和回收

  • CPP 可以正常使用 C 语言的 malloc 和 free 函数
  • 提供了专用的两个关键字用于分配和回收 new, delete

分配

  • 单个空间的申请:数据类型 *指针名 = new 数据类型
    • 例如:int *p1 = new int 会在堆区申请一个 int 大小的内存空间,将地址给p1
  • 连续空间的申请:数据类型 *指针名 = new 数据类型[个数]
    • 例如:int *p2 = new int[5]

回收

  • 单个空间的回收:delete 指针名
    • 例如:delete p1
  • 连续空间的释放:delete []指针名
    • 例如:delete []p2
  • 回收后赋值 nullptr 防止野指针
    • 例如:p1 = nullptr

对比 malloc/free

  • new/delete 是关键字,malloc/free 是函数
  • new 申请空间以数据类型为单位,malloc 申请空间以字节为单位
  • new 申请空间返回对应数据类型的地址,malloc 返回 void * 类型
  • malloc/free 申请和释放没有单个和连续的区别,而 new/delete 需要区分单个和连续空间
  • new 申请对象空间时系统会自动调用构造函数
  • delte 释放对象空间时系统会自动调用析构函数

Last updated: