неэффективность конструктора для случаев, когда объект возвращается из функции по значению

У моего класса Matrix есть два конструктора, включая копирующий, который выполняет глубокое копирование. Такое решение прекрасно работает для очевидного случая копирования другого объекта. Хотя в следующем случае:

Matrix m = m1 * m2; // for earlier constructed m1 & m2

Мне кажется, что это неэффективно, так как я создал объект в операции умножения только для того, чтобы скопировать его вместо непосредственного присвоения m. И матрица может занимать действительно огромный кусок памяти. Как справиться с этим лучше, какова практика профессионалов?

Матрица реализуется динамически как двумерный список, как в случае разреженных матриц.

Постскриптум Я понимаю, что результат умножения является локальным. Тем не менее, я упал, что это можно было бы как-то лучше обрабатывать без вышеупомянутых чрезмерных вычислений.

2

Решение

В C ++ 11 вы можете создать конструктор перемещения, который должен быть быстрее в вашем случае. Я не собираюсь объяснять, как это сделать, поскольку уже есть много учебных пособий, таких как эта: http://thbecker.net/articles/rvalue_references/section_01.html

Вы также можете попробовать шаблоны выражений, которые могут хорошо оптимизировать код, подобный этому, хотя синтаксис будет выглядеть по-другому. Увидеть http://en.wikipedia.org/wiki/Expression_templates для начала.

6

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector