new表达式的目的在于运行阶段为一对象分配未命名内存,并使用指针以访问这个值,因此new表达式返回的是指针,其通用格式如下:
typeName *pointer_name= new typeName;
与普通的变量地址赋给指针如:
int higgens;
int *pt=&higgens;
相比,new出来的指针所指向的内存空间是没有命名的,因此只能通过指针进行访问,而第二种情况能通过higgens和*pt访问。
new的一个重要功能是在动态数组中的应用:
首先创建一个动态数组如:
int *p=new int [10]
以创建一个包含10个int元素的数组,指针指向的是该数组的第一个元素;要使用该动态数组的其它元素,只需了解到C和C++都是用指针来处理数组,即可知道:*p初始时指向的是数组的第一个元素,对此可以使用p[0]访问;而第二个元素则可使用p[1],等等。下面给个例子:
#include<iostream>
using namespace std;
int main()
{
int *p= new int[3];
p[0]=0;
p[1]=1;
p[2]=2;
cout<<"p[0] is "<<p[0]<<endl;
p=p+1;
cout<<"Now p[0] is "<<p[0]<<endl;
return 0;
}
结果如下:
使用new动态创建数组或对象的同时,可以用delete来释放内存。delete释放内存有两种基本情况:
delete p; //p指向普通对象
delete [] p; //p指向数组
对于delete的使用应注意:delete只能用来释放new的内存;不能delete同意内存两次;虽然对空指针应用delete是安全合法的但没意义。