Композиция неявных функций в Haskell

Предположим, что у вас есть функция, которая возвращает существенный объект:

Matrix multiply(const Matrix &a, const Matrix &b);

Когда вы пишете такой код:

Matrix r = multiply(a, b);

, тогда обычный компилятор C ++ создаст временную объект для результата multiply(), вызовите конструктор копирования для инициализации r, а затем уничтожьте временное возвращаемое значение. Перемещение семантики в C ++ 0x позволяет вызвать «move constructor» для инициализации r путем копирования его содержимого, а затем отменить временное значение без его разрушения.

Это особенно важно, если (как, например, пример Matrix выше), копируемый объект выделяет дополнительную память в куче для хранения своего внутреннего представления. Конструктор копирования должен либо сделать полную копию внутреннего представления, либо использовать семантику ссылок и семантику копирования на запись. Конструктор перемещения оставил бы кучную память и просто скопировал указатель внутри объекта Matrix.

13
задан Will Ness 23 September 2013 в 16:54
поделиться