我使用以下代码
Matrix operator * (const Matrix & obj)
{
    Matrix m = Matrix();
    for (int i = 0; i < 4; i++)
        for (int j = 0; j < 4; j++)
        {
            m[i][j] = 0;
            for (int k = 0; k < 4; k++)
                m[i][j] += _data[i][k] * obj._data[k][j];
        }
    return m;
}
像这样
v1 = m_proj * m_view * m_object * v1;
但我想它是非常未经优化的,因为我认为我在操作员内部创建的新矩阵正在疯狂地复制。如果我这样做
Matrix & operator * (const Matrix & obj)
{
    Matrix m = Matrix();
    for (int i = 0; i < 4; i++)
        for (int j = 0; j < 4; j++)
        {
            m[i][j] = 0;
            for (int k = 0; k < 4; k++)
                m[i][j] += _data[i][k] * obj._data[k][j];
        }
    return m;
}
将运算符的返回类型更改为对 Matrix 的引用,整个代码完全停止工作(它编译,只是矩阵没有按应有的方式相乘)。
如果我将其更改为
Matrix & operator * (const Matrix & obj)
{
    Matrix & m = * new Matrix();
    for (int i = 0; i < 4; i++)
        for (int j = 0; j < 4; j++)
        {
            m[i][j] = 0;
            for (int k = 0; k < 4; k++)
                m[i][j] += _data[i][k] * obj._data[k][j];
        }
    return m;
}
现在它可以工作了,但我的内存泄漏很严重。
那么我该如何解决这个问题呢?有没有优雅的解决方案?
谢谢!