首页 > 代码库 > new 和 delete

new 和 delete

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可以用于空指针。


new 和 delete