ASP .Net MVC 3: пользовательская ненавязчивая проверка

Перемещение семантики - это передача ресурсов, а не копирование их, когда больше не требуется исходное значение.

В C ++ 03 объекты часто копируются, только для их уничтожения или назначения перед любым кодом снова использует значение. Например, когда вы возвращаетесь по значению из функции, если только RVO не запускается - возвращаемое значение копируется в стек стека вызывающего, а затем выходит за пределы области действия и уничтожается. Это всего лишь один из многих примеров: см. Pass-by-value, когда исходный объект является временным, такие алгоритмы, как sort, которые просто переупорядочивают элементы, перераспределение в vector при превышении capacity() и т. Д.

Когда такие пары «копировать / уничтожать» дороги, это обычно потому, что объекту принадлежит какой-то тяжеловесный ресурс. Например, vector<string> может владеть динамически выделенным блоком памяти, содержащим массив объектов string, каждый со своей собственной динамической памятью. Копирование такого объекта является дорогостоящим: вам необходимо выделить новую память для каждого динамически выделенного блока в источнике и скопировать все значения в. Затем вам нужно освободить всю память, которую вы только что скопировали. Однако перемещение большого vector<string> означает просто копирование нескольких указателей (которые относятся к блоку динамической памяти) к месту назначения и обнуление их в источнике.

13
задан halfer 1 October 2017 в 20:36
поделиться