Re: Есть ли жизнь после перемещения?
От: Videoman Россия https://hts.tv/
Дата: 20.11.18 08:26
Оценка: 25 (2)
Здравствуйте, rg45:

Вопрос действительно философский. По мне, как минимум после перемещения должны работать еще две операции: swap (если есть) и присваивание (operator=).
В процессе опыта реализации перемещения разных объектов, решил что оставлять объект в валидном состоянии, в общем случае, может быть дороговато (зависит от объекта конечно), да и начинают вылезать нежелательные практики от которых, вроде как, хотелось уйти. Постараюсь объяснить что я имею ввиду:
Если строго соблюдать RAII, то в классах многих объектов отсутствуют конструкторы по умолчанию. В С++ это удобно делать если объект в "дефолтном" состоянии не имеет смысла и не может делать ничего полезного. Также такой объект не может быть в не инициализированном состоянии и не нужны внутренние проверки на валидность состояния при вызове публичных методов (максимум ассерты). Все хорошо и концепция жива пока мы не сделаем перемещение объекта. Если после перемещения продолжать работу с таким объектом, то тут же "вылезает" новое "дефолтое" состояние, такое же как в случае двойной инициализацией все преимущества RAII идут лесом.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.