我使用以下代码
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;
}
现在它可以工作了,但我的内存泄漏很严重。
那么我该如何解决这个问题呢?有没有优雅的解决方案?
谢谢!