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

来源:互联网 发布:青岛软件开发工资待遇 编辑:程序博客网 时间:2024/06/13 23:34

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


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

//定义了一个表示矩阵的类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;//最后将指向这些数组的指针的空间释放}

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

0 0
原创粉丝点击