Что следует за мнением, и я не очень разбираюсь в стандарте 0x, но я думаю, что у меня есть достаточно веские аргументы в поддержку.
Нет. На самом деле было бы уместно вообще не поддерживать присвоение.
Рассмотрим семантику:
«назначить» означает «причина B, которая уже существует,идентичен ".«копировать» означает «создать B и сделать его идентичным A».«своп» означает «заставить B быть идентичным тому, что было A, и одновременно заставить A быть идентичным тому, что было B».«двигаться» означает «заставить B быть идентичным тому, что было A, и уничтожить A».
Если мы не можем копировать, то мы не можем копировать и менять местами.Копирование и замена предназначены для безопасного выполнения присваивания: мы создаем C, идентичный A, меняем его на B (так что теперь C - это то же, что B, а B - A) и уничтожаем C(очистка старых данных B).Это просто не работает с перемещением и обменом: мы не должны уничтожать А в любой точке, но движение уничтожит его.Кроме того, перемещение не создает нового значения, поэтому происходит то, что мы перемещаем A в B, и тогда нам не с чем поменяться.
Кроме того, причина - сделать класс некопируемым, безусловно, не потому, что«Создать B» будет проблематично, но потому что «заставить его быть идентичным A» будет проблематичным.Итак, если мы не можем скопировать, почему мы должны ожидать, что сможем назначить?