Почему нет присваивания по умолчанию / конструктора перемещения?

Я простой программист. Переменные-члены моего класса чаще всего состоят из POD-типов и STL-контейнеров. Из-за этого мне редко приходится писать операторы присваивания или конструкторы копирования, поскольку они реализованы по умолчанию.

Добавьте к этому, если я использую std :: move для объектов, которые нельзя перемещать, он использует присваивание -operator, что означает, что std :: move совершенно безопасен.

Поскольку я простой программист, я хотел бы воспользоваться возможностями перемещения без добавления оператора конструктора перемещения / присваивания в каждый класс, который я пишу, поскольку компилятор мог бы просто реализовать их как " this-> member1_ ​​= std :: move (other.member1 _); ... "

Но это не так (по крайней мере не в Visual 2010), есть ли для этого какая-то особая причина?

Что еще более важно; есть ли способ обойти это?

Обновление: Если вы посмотрите на ответ GManNickG, он предоставляет отличный макрос для этого. И если вы не знали, если вы реализуете семантику перемещения, вы можете удалить функцию-член подкачки.

87
задан Viktor Sehr 4 March 2012 в 22:01
поделиться