首页 > 代码库 > C++动态申请二维数组与拷贝构造函数
C++动态申请二维数组与拷贝构造函数
一、C++动态申请二维数组
在C++中不能直接动态申请二维数组,经过一番搜索,发现一种动态申请二维数组较好的方法。
代码如下(MATRIX_TYPE为某一种类型,Lines和Columns):
MATRIX_TYPE** elem;//C++二维矩阵动态申请空间elem = new MATRIX_TYPE*[Lines];elem[0] = new MATRIX_TYPE[Lines * Columns];for(int i = 1; i < Lines; i++) elem[i] = elem[i - 1] + Columns;
可以直接读取和赋值:
elem[i][j] = 0;
这种方法申请二维数组的优点是内存连续,使用直接。
二、C++拷贝构造函数
当使用如下代码时,C++会将原对象进行拷贝,再赋值给下一个对象。但是这会出现一个问题,就是当对象中包含动态成员时,C++无法将动态成员数据进行拷贝。
class Matrix{public: int Lines; int Columns; MATRIX_TYPE** elem;//初始化 Matrix(); Matrix(int lines, int columns); ~Matrix();};Matrix::Matrix(int lines, int columns){ Lines = lines; Columns = columns; //C++二维矩阵动态申请空间 elem = new MATRIX_TYPE*[Lines]; elem[0] = new MATRIX_TYPE[Lines * Columns]; for(int i = 1; i < Lines; i++) elem[i] = elem[i - 1] + Columns; memset(elem[0], 0, Lines * Columns * sizeof(MATRIX_TYPE));}Matrix::~Matrix(){ //C++二维矩阵析构 delete elem[0]; delete elem;}
Matrix m2 = Matrix();Matrix m1 = m2;
解决这一问题的一个办法是重写拷贝构造函数。形式如下:
//拷贝构造函数Matrix::Matrix(const Matrix& m){ //由于在构造函数中存在new,故必须重写拷贝构造函数 Lines = m.Lines; Columns = m.Columns; //C++二维矩阵动态申请空间 elem = new MATRIX_TYPE*[Lines]; elem[0] = new MATRIX_TYPE[Lines * Columns]; for(int i = 1; i < Lines; i++) elem[i] = elem[i - 1] + Columns; memcpy(elem[0], m.elem[0], Lines * Columns * sizeof(MATRIX_TYPE));}
C++动态申请二维数组与拷贝构造函数
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。