【问题标题】:deleting pointer after return返回后删除指针
【发布时间】:2018-06-03 19:29:24
【问题描述】:
Matrix * Matrix::transpose()
{

    Matrix *m = new Matrix(*this->numCols, *this->numRows, false);

    for (int i = 0; i < *this->numRows; i++)
    {
        for (int j = 0; j < *this->numCols; j++)
        {
            m->setValue(j, i, this->getValue(i, j));
        }
    }

    return m;
}

大家好。转置矩阵后,我的记忆力不断增加。我怎样才能解决这个问题,通过删除返回的 m(怎么做?)或删除 this->~Matrix() ?

【问题讨论】:

  • 最简单的方法是返回 Matrix 而不是指向新对象的指针。
  • 你们太快了,谢谢你回答我!我会尝试这两个。
  • 你为什么使用手动内存管理而不是智能指针?
  • @BarbarosBaturay 不,您不需要任何类型的指针。当问题使用动态分配时,智能指针不是解决方案。解决方案是不使用动态分配。

标签: c++ pointers


【解决方案1】:

只是不要使用任何指针。这里没有理由使用new。做吧

Matrix Matrix::transpose()
{

    Matrix m {*this->numCols, *this->numRows, false};

    for (int i = 0; i < *this->numRows; i++)
    {
        for (int j = 0; j < *this->numCols; j++)
        {
            m.setValue(j, i, this->getValue(i, j));
        }
    }

    return m;
}

还有一件事,你为什么把this 到处乱写?如果您想明确某事是成员,只需添加前缀/后缀,例如 m_memberNamemMemberNamememberName_

【讨论】:

  • 嗯,谢谢你的建议。如果行或列相同,我也做了一些想法,比如 void transpose 和更改值等。这是一种有效的方法吗?
  • Matrix m(*this-&gt;numCols, *this-&gt;numRows, false);
  • 是的,这样更好。立即编辑。
猜你喜欢
  • 2011-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-30
  • 2015-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多