new与delete的使用

new运算符是给指针分配一片内存空间,与delete运算符一起使用,以达到直接进行动态内存分配和释放的目的
new返回指定类型的一个指针,如果分配失败(如没有足够的内存空间),则返回0

1
2
double *p;
p = new double;

此时系统会根据double类型的空间大小来开辟一个内存空间,并将地址放在指针p中
delete是释放new请求到的空间的

注意:
1.delete必须来释放之前new分配的指针
2.用new可以指定分配的内存大小

1
2
3
4
int 	*p;
p = new int(30); //为指针p开辟30个字节单元的内存单元
...
delete p;

3.new可以为数组分配内存,当释放时必须告诉delete数组中有多少元素

1
2
3
4
int *p;
p = new int[10];
...
delete [10] p ;

例:

1
2
3
4
5
6
void Test()
{
char* p;
strcpy(p,"china");
cout << p << endl;
}

此时只是给变量p分配了一个地址空间,并没有给p所指向的分配空间,所以程序出错
应改为:

1
2
3
4
5
6
7
void  Test()
{
char *p;
p = new char(10);
strcpy(p,"china");
cout << p << endl;
}

注意:对于用new运算符创建的对象,必须使用delete才能调用析构函数
问题:看以下代码:

1
2
A *pa = new A[10];
delete pa;

则类A的构造函数和析构函数分别执行了几次()
答:构造函数执行了10次,析构函数构造了1次

0%