1.动态数组的定义
int* pInt = new int[10];
此 new 表达式分配了一个含有 10 个 int 型元素的数组,并返回指向该数组第一个元素的指针,此返回值初始化了指针 pInt;
2.动态数组的初始化
上面的例子中,定义的数组是没有经过初始化的,其初始化的方式跟数组类似。
①如果是类类型,那么不用显式的对它进行初始化,程序会默认调用类的构造函数为其进行初始化。
string* pStr = new string[10];
②如果是默认类型,则可以通过下面的方式进行初始化。
int* pInt = new int[10]();
③const动态数组必须初始化。
const int* pInt = new const int[10];
3.注意事项
a.C++ 虽然不允许定义长度为 0 的数组变量,但明确指出,调用 new 动态创建长度为 0 的数组是合法的:
char arr[0]; // error: cannot define zero-length array char *cp = new char[0]; // ok: but cp can't be dereferenced
b.动态数组的释放
delete [] pInt;
注:方括号对必须添加,如果不添加,编译器是不会报错的,理论上会产生内存泄露。