У моего класса Matrix есть два конструктора, включая копирующий, который выполняет глубокое копирование. Такое решение прекрасно работает для очевидного случая копирования другого объекта. Хотя в следующем случае:
Matrix m = m1 * m2; // for earlier constructed m1 & m2
Мне кажется, что это неэффективно, так как я создал объект в операции умножения только для того, чтобы скопировать его вместо непосредственного присвоения m. И матрица может занимать действительно огромный кусок памяти. Как справиться с этим лучше, какова практика профессионалов?
Матрица реализуется динамически как двумерный список, как в случае разреженных матриц.
Постскриптум Я понимаю, что результат умножения является локальным. Тем не менее, я упал, что это можно было бы как-то лучше обрабатывать без вышеупомянутых чрезмерных вычислений.
В C ++ 11 вы можете создать конструктор перемещения, который должен быть быстрее в вашем случае. Я не собираюсь объяснять, как это сделать, поскольку уже есть много учебных пособий, таких как эта: http://thbecker.net/articles/rvalue_references/section_01.html
Вы также можете попробовать шаблоны выражений, которые могут хорошо оптимизировать код, подобный этому, хотя синтаксис будет выглядеть по-другому. Увидеть http://en.wikipedia.org/wiki/Expression_templates для начала.
Других решений пока нет …