Ради обсуждения, я предполагаю, что вы имеете в виду переход к значению, что исходный объект "отброшен" (больше не используется, не был запущен деструктор) вместо того, чтобы иметь две копии (что приведет к гораздо большему проблемы, отсчет ссылок и т. д.). Я обычно имею в виду свойство быть способным делать это побитовым.
В основах кода, над которыми я работаю, большинство объектов перемещаются по битам, поскольку они не хранят собственные ссылки. Тем не менее, некоторые структуры данных не могут быть перемещены по битам (я полагаю, что std :: set gcc не может быть перемещен по битам; другими примерами будут узлы связанного списка ). В общем, я бы избегал попытки использовать это свойство, так как оно может привести к очень сложным ошибкам при отладке, и предпочел бы объектно-ориентированные вызывающие конструкторы копирования.
Отредактировано для добавления :
Кажется, есть некоторая путаница в том, как / почему кто-то это сделал: вот мой комментарий о том, как:
Обычно я вижу выше на альтернативном
реализации вектора. Память
распределяется через
malloc (sizeof (Class) * size) и
объекты строятся на месте через
явно называемые конструкторы и
деструкторов. Иногда (как во время
перераспределение) они должны быть перемещены,
так что вариант это сделать std :: vector's
повторный вызов конструкторов копирования
на новую память и деструкторы на
старый или используйте memcopy и просто "бесплатно"
старый блок. Чаще всего последний
просто "работает", но не для всех
объекты.
Что касается того, почему использование memcopy (или realloc ) может быть значительно быстрее.
Да, он вызывает неопределенное поведение, но он также имеет тенденцию работать для большинства объектов. Некоторые считают, что скорость того стоит. Если бы вы действительно настроились на использование этого подхода, я бы предложил реализовать черту типа bitwise_movable, чтобы позволить типам, для которых это работает, быть в белом списке, и использовать традиционную копию для объектов, не входящих в белый список, так же, как пример здесь .