天天看点

delete和new运算符的用法

一. new用法

1. 分配单变量地址空间

  • 一般格式:指针变量名 = new 类型标识符;
  • 格式2:指针变量名 = new 类型标识符(初始值);其在内存分配成功后,同时将一初始值存放到该内存单元中。

2.分配数组空间

  • 一维数组格式:指针变量名 = new 类型名[下标表达式];
二.delete用法

1.删除单变量地址空间

  • delete 指针变量名;

2.删除数组空间

  • 一维数组格式:delete []指向该数组的指针变量名;delete的方括号中无需填数组元素数,系统自己知道,写了编译器也忽略。若此处少了方括号,则编译器认为该指针只是指向数组第一个元素,而产生回收不彻底的问题。
三.二维数组的new和delete

例如二维数组int array[a][b]

  • 方式一

    此方法要求b必须是常量(在编译期间即可确定值),这时new int[a][5]和new int[a]就没有什么区别了,只是数组的元素类型由int变为了int[5],因为只有一个变量所以本质上是一维数组,delete的时候直接delete []array就好了。

int i, j, a;
int (*array)[5] = new int[a][5];//array相当于是一级指针,指向的是int [5]类型
for(i=0; i<a; i++)
{
    for(j=0; j<5; j++)
    {
    	cin>>array[i][j];
    }
}
delete []array;
           
  • 方式二

    其为标准的二维数组分配和删除空间的方法,即new和delete的时候都要层层操作。先创建一个一维数组用来存指针,然后再分别对该数组中的每个指针创建数组,即为二维数组。delete的时候先分别delete内层每个指针的数组,再delete为指针分配的数组。二维数组delete不需要知道b的值,但要知道a的值。

int **array = new int*[a];
for(i=0; i<a; i++)
{
	array[i] = new int[b];
}
for(i=0; i<a; i++)
{
	for(j=0; j<b; j++)
	{
		cin>>array[i][j];
	}
}
for(i=0; i<b; i++)
{
	delete []array[i];
}
delete []array;
           
c++

继续阅读