操作符 new
C++ 操作符 new 可以用来动态存储分配,该操作符返回 一个指向所分配空间的指针。 例如, 给一个整数分配存储空间,可以使用下面的语句。
int *y;
当需要使用该整数时,可以使用如下语法来分配存储空间:
y = new int;
操作符new 分配了一块能存储一个整数的空间, 并将指向该空间的指针返回给y, y 是对整数指针的引用,而*y则是对整数本身的引用。为了在刚分配的空间中存储一个整数值, 比如 20,可以使用如下语法:
*y =20;
三步以整合,可以写作:
int *y = new int(20);
一维数组:
为了在运行时创建一个一维浮点数组x, 首先必须把x说明成一个指向float的指针,然后为数组分配足够的空间。例如, 一个大小为n的一维浮点数组可以按如下方式来创建:
float *x=new float [n];
操作符new分配n个浮点数所需要的空间,并返回指向第一个浮点数的指针。可以使用如下语法来访问每个数组元素:x[0],x[1],x[n-1] 等。
异常处理
在执行语句
float *x = new float [n];
时,计算机有时会出现不能分配足够的空间,这是会报异常 (exception). 可以采用try-catch 结构来捕获 new 引发的异常:
# include<except.h>
# include<stdlib.h>
float *x
try{x = new float [n];}
catch(xalloc){cerr<<"out of memorry"<<endl;
exit(1);}
操作符 delete
动态分配的存储空间不再需要时应该被释放,所释放的空间可重新用来动态的创建新的结构。下面的语句是用来释放分配给*y的空间以及一维数组x:
delete y;
delete []x;
二维数组
C++中的二维数组的动态分配问题是一个‘不太容易的事情‘。二维数组的存储结构是下图这个样子。
先写代码吧,随后补图,哈哈哈!
template<class T>
bool Make2DArray(T **&x, int rows, int cols)
{
try{
//创建行指针
x = new T *[rows];
// 为每一行分配空间
for(int i=0;i<rows,i++)
x[i]=new int[cols];
return true;}
catch(xalloc){return false;}
}