本篇主要介绍C++ 中的动态内存。

在 C 语言中我们可以使用 malloccallocreallocfree 等进行动态内存操作,在 C++ 中,除了兼容 C 中的动态内存分配的方法之外,还提供了两个关键字 newdelete

使用new/delete 来分配指定类型变量的内存:

int* p = new int;
//申请内存的时候进行初始化
int* p = new int(66);
//释放内存空间
delete p;
p = NULL;

申请指定类型数组大小的内存:

int* p = new int[5];
//申请数组大小的内存并初始化(C++11标准)
int* p = new int[5]{11,22,33,44,55};
//释放数组大小的内存
delete[] p;
p = NULL;

申请和释放 N 维数组大小的内存:

// 需要用一个 N-1 维数组指针去指向申请的内存
int (*p)[4] = new int[3][4];
delete[] p;
p = NULL;

// 需要c++11标准支持
int (*p)[2] = new int[2][2]{/**/{1,2} , {3,4}};
delete[] p;
p = NULL;

int (*p)[3][4] = new int[2][3][4];
delete[] p;
p = NULL;

定位分配:

new(指针) 类型(初始值)
//指针表示分配内存的起始地址