c++ - C++中的赋值运算符删除内存

标签 c++

我试图在分配新内存之前先删除内存,但我不知道该怎么做,并且在尝试调整矩阵大小时遇到​​一个问题。

Matrix & operator=(const Matrix &B){            
            row = B.row;
            col = B.col;

            if (matrix==0){
                matrix = new int*[row];
                for (int i = 0; i < row; ++i)
                    matrix[i] = new int[col];
            }
            for (int i = 0; i < row; i++) {
                for (int j = 0; j < col; j++) {                 
                    matrix[i][j] = B.matrix[i][j];
                }
            }   
        return *this;

    }

例如(调整大小)

Matrix matrixA(1, 1);
Matrix matrixB(2, 2);
matrixA = matrixB;

谢谢你和最好的问候

最佳答案

在每一行然后在矩阵上使用 delete[]

if (matrix!=NULL){
    for (int i = 0; i < row; ++i)
        delete[] matrix[i];
    delete[] matrix;
}
row = B.row;
col = B.col;
matrix = new int*[row];
for (int i = 0; i < row; ++i)
    matrix[i] = new int[col];

请注意,这不会复制源矩阵的内容。为此需要另一个循环

for (int i = 0; i < row; ++i)
    for (int j = 0; j < col; ++j)
        matrix[i][j] = B.matrix[i][j];

关于c++ - C++中的赋值运算符删除内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30763995/

相关文章:

c++ - &arr[size] 有效吗?

c++ - 将整个 ASCII 文件读入 C++ std::string

c++ - virtual ~T(){} 和 virtual ~T() = default 之间的区别;

c++ - 初始化两个相互引用的结构数组

C++多线程解码音频数据

c++ - 将 ifstream 对象传递给函数后如何从输入文件中读取?

C++ 在给定的像素数据数组上绘制矩形

c++ - 尝试在基类之外创建派生类的实例时出错

C++编程之谜,有趣的函数指针

c++ - 登录到 Tizen 中的特定文件?