new 和 delete能够动态的创建数组,删除数组。
char *a = new char;
delete a;
char *a = new char[12] //创建一个12个字节的字符数组
delete [] a;
int *a = new int[12]; //创建一个12个字节整形数组
delete [] a;
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int main()
{
int *a = new int[10];
for (int i = 0; i < 10; i ++) {
a[i] = i;
}
for (int i = 0; i < 10; i ++) {
cout << a[i] << endl;
}
delete [] a;
return 0;
}
创建二维数组
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int main()
{
int **a = new int* [10]; //注意前面的指针是比后面高一级的指针
for (int i = 1; i <= 10; i ++) { //二维指针的创建是一维一维进行的。
a[i-1] = new int[i];
}
for (int i = 1; i <= 10; i ++) {
for (int j = 0; j < i; j ++) {
a[i-1][j] = i;
}
}
for (int i = 1; i <= 10; i ++) {
for (int j = 0; j < i; j ++) {
cout << a[i-1][j]<<" ";
}
cout << endl;
}
for (int i = 1; i <= 10; i ++) { //二维指针的删除是先删除一维指针,在删除二维指针。
delete [] a[i-1];
}
delete [] a;
return 0;
}
注意:
在构造函数中使用new来初始化对象的指针,则应在析构函数中使用delete。
new和delete必须相互兼容。new对应delete,new [] 对应 delete []。
如果有多个构造函数,则必须以相同的方式使用new,要么都带中括号,要么都不带。因为只有一个析构函数,因此所有的构造函数都必须与它兼容。不过,可以在一个构造函数中使用new来初始化指针,而在另一个构造函数中将指针初始化为空,这是因为delete可以用于空指针。