new运算符是给指针分配一片内存空间,与delete运算符一起使用,以达到直接进行动态内存分配和释放的目的
new返回指定类型的一个指针,如果分配失败(如没有足够的内存空间),则返回01
2double *p;
p = new double;
此时系统会根据double类型的空间大小来开辟一个内存空间,并将地址放在指针p中
delete是释放new请求到的空间的
注意:
1.delete必须来释放之前new分配的指针
2.用new可以指定分配的内存大小1
2
3
4int *p;
p = new int(30); //为指针p开辟30个字节单元的内存单元
...
delete p;
3.new可以为数组分配内存,当释放时必须告诉delete数组中有多少元素1
2
3
4int *p;
p = new int[10];
...
delete [10] p ;
例:1
2
3
4
5
6void Test()
{
char* p;
strcpy(p,"china");
cout << p << endl;
}
此时只是给变量p分配了一个地址空间,并没有给p所指向的分配空间,所以程序出错
应改为:1
2
3
4
5
6
7void Test()
{
char *p;
p = new char(10);
strcpy(p,"china");
cout << p << endl;
}
注意:对于用new运算符创建的对象,必须使用delete才能调用析构函数
问题:看以下代码:1
2A *pa = new A[10];
delete pa;
则类A的构造函数和析构函数分别执行了几次()
答:构造函数执行了10次,析构函数构造了1次