【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;//最后将指向这些数组的指针的空间释放
}

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值