我的类Matrix有两个构造函数,包括复制一个,执行深度复制。这种解决方案非常适用于复制另一个对象的明显情况。虽然在以下情况中:
Matrix m = m1 * m2; // for earlier constructed m1 & m2
在我看来效率低下,因为我在乘法运算中创建了一个对象,只是为了复制而不是直接赋值给m。矩阵可以占据很大的内存。如何更好地处理它,专业人士的常见做法是什么?
Matrix是作为二维列表动态实现的,就像稀疏矩阵一样。
P.S。我知道乘法的结果是局部的。但是,如果没有上述过度计算,我可能会以某种方式处理得更好。
答案 0 :(得分:6)
在C ++ 11中,您可以创建一个移动构造函数,在您的情况下应该更快。我不会解释如何这样做,因为已经有许多教程,例如:http://thbecker.net/articles/rvalue_references/section_01.html
您也可以尝试表达模板,这些模板可以很好地优化这样的代码,尽管语法看起来会有所不同。有关入门的信息,请参阅http://en.wikipedia.org/wiki/Expression_templates。