Appearance
分配和回收
- 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 释放对象空间时系统会自动调用析构函数