【C++】指向指针的指针int**的深复制的实现

实现指向指针的指针的深复制

如编写一个构造函数初始化一个矩阵。矩阵元素用一个二维数组来表示。

//定义了一个表示矩阵的类
class Matrix {
public:
    Matrix(string name, int height, int width, int** element);
    ~Matrix();
private:
    string name;
    int height;
    int width;
    int** param;
};
//构造函数的实现
Matrix::Matrix (string name, int height, int width, int** element) {
    this->name = name;
    this->height = height;
    this->width = width;
    //实现指向指针的指针的深复制
    param = new int*[height];//申请一块内存用来储存元素为指向int的指针的数组,这些指针分别指向每一行
    for (int i = 0; i < height; ++i) {
        //为每一个存放指针的数组申请一块内存储存元素为int的数组,这个数组储存一行里的每一个元素,并将元素初始化为0
        param[i] = new int[width]();
        for (int j = 0; j < width; ++j) {
        param[i][j] = element[i][j];//进行逐个元素赋值
        }
    }
}

因为在这里指向指针的指针,实际上指向一个二维数组,所以要单独为每一个维度申请一块内存,第二个维度要用循环逐个申请内存。
注意在申请最底层的维度时,在new语句最后加上括号(),将元素初始化,不然容易出现垃圾值,后续操作会出现问题。

删除操作

Matrix::~Matrix() {
    for (int i = 0; i < height; ++i) {
        delete []param[i];//先将存放int型元素的数组内存逐个释放掉
    }
    delete []param;//最后将指向这些数组的指针的空间释放
}

记:释放空间的顺序和申请空间的顺序相反

你可能感兴趣的:(二维数组,Class,指针)