C ++ - 创建一个2D复制构造函数

时间:2018-05-18 02:27:57

标签: c++ multidimensional-array dynamic-arrays

我正在努力学习我的决赛,我尝试将我的动态二维数组复制构造函数放在一起。当我创建备份并打印它以查看它是否有效时,它打印出我一遍又一遍相同的内存地址。这是我的复制构造函数: 更新,这是我从我的文件.txt中读取数据的地方

void Matrix::readTemps(ifstream &inFile) 
{
    while (!inFile.eof())
    {
        for (int row = 0; row < mnumRows; row++)
        {
            for (int col = 0; col < mnumCols; col++)
            {
                inFile >> Temps[row][col];
            }
        }
    }
}
Matrix::Matrix(const Matrix & original) 
{
    mnumRows = original.mnumRows;
    mnumCols = original.mnumCols;
    Temps = new double*[mnumRows];
    for (int row = 0; row < mnumRows; row++) 
        Temps[row] = new double[mnumCols];
}
Matrix& Matrix::operator=(const Matrix & second)  
{  
    if (this != &second)
    {
        delete[] Temps;
        mnumRows = second.mnumRows;
        mnumCols = second.mnumCols;
        Temps = new double*[second.mnumRows];
        for (int row = 0; row < mnumRows; row++)
            Temps[row] = new double[mnumCols];
    }
    return *this;
}

更新,这是在我的main.cpp:

//Example of overloaded assignment operator.
Matrix TestMatrix;
TestMatrix = NYCTemps;

//Example of copy constructor.
Matrix copyOfMatrix(NYCTemps); // The traditional way to copy the phonebook.

NYCTemps.display();
copyOfMatrix.display();
cout << endl;

我相信我的作业重载操作符也是正确的,但我发布它只是为了确认它是更聪明的头脑。

1 个答案:

答案 0 :(得分:0)

在您的版本的复制构造函数中 和您只分配的复制赋值运算符 内存为2d数组但您不复制原始值 矩阵到新的。

您应该在两种方法中添加这些行

for (int r = 0; r < mnumRows; ++r)
    delete[] Temps[r];
delete[] Temps;

Temps是2d数组,因此在复制赋值运算符中 它必须被删除(首先删除为每行中的列分配的内存,然后删除行的内存)

 sm: 0px -> 768px - tablet portrait
 md: 769px -> 1442px - tablet landscape and laptop
 lg: 1443px -> 1920px - large screens