私は次のコードを使用します
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;
}
今は動作しますが、メモリリークがひどいです。
では、どうすればこの問題を解決できますか?エレガントな解決策はありますか?
ありがとう!