Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> r-value refs & move-semantics. что? как? для чего? 
V
    Опции темы
bsa
Дата 14.4.2012, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



boostcoder, исходным объектом пользоваться можно! Более того, исходный объект после перемещения используется как минимум в деструкторе. Но так как ты перенес состояние, то деструктор отработает "вхолостую" без реального освобождения ресурсов. А вот после деструктора объект уже использовать, как ты понимаешь, нельзя. По логике вещей, деструктор вызывается сразу же после отработки операции перемещения:
Код
MyClass x = y + z;
Сначала выполнится y+z и результат поместится во временный объект. Затем вызовется перемещающий конструктор для x и перенесет состояние из временного объекта. Затем будет вызван деструктор временного объекта.
PM   Вверх
mes
Дата 14.4.2012, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(bsa @  14.4.2012,  10:16 Найти цитируемый пост)
 исходным объектом пользоваться можно!

что значит можно ? да, он существуетн ( и довольно долго  если был не временным), но у него неопределено состояние, и соответсвенно, неопределено поведение..
для конкретного случая можно определить возможность использования, можно даже обратно вдохнуть жизнь в такие объекты, но нет возможности распространнить это на все случаи.. поэтому говорить о можно нельзя smile
или иногда можно, но очень осторожно smile



Это сообщение отредактировал(а) mes - 14.4.2012, 11:43


--------------------
PM MAIL WWW   Вверх
bsa
Дата 14.4.2012, 12:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Цитата(mes @  14.4.2012,  12:40 Найти цитируемый пост)
у него неопределено состояние

с чего это вдруг? у него вполне определенное состояние - то, в котором его оставил "перемещатель" (например, если перемещатель занулил только указатель на начало данных вектора, а остальные оставил без изменений, то состояние неопределенное - в общем случае, только деструктор отработает корректно). А это уже задача программиста следить за тем, чтобы состояние соответствовало планам использования.
Имхо, после перемещения объект должен быть уничтожен... А "вдыхать" в него жизнь - это только делать себе хуже.
PM   Вверх
mes
Дата 14.4.2012, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(bsa @  14.4.2012,  11:06 Найти цитируемый пост)
с чего это вдруг? у него вполне определенное состояние - то, в котором его оставил "перемещатель" 

это то понятно.. но во первых нет гарантий заставляющих оставлять объект в коректном состоянии, во вторых нет (не всегда есть) такой возможности.. 

Цитата(mes @  14.4.2012,  10:40 Найти цитируемый пост)
для конкретного случая можно определить возможность использования
 а для общего случая нельзя.. 




--------------------
PM MAIL WWW   Вверх
Sahab
Дата 14.4.2012, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 151
Регистрация: 1.9.2009

Репутация: нет
Всего: 3



йопт... так можно или нельзя?
Че в стандарте написано?
PM MAIL   Вверх
mes
Дата 14.4.2012, 12:18 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(bsa @  14.4.2012,  11:06 Найти цитируемый пост)
у него вполне определенное состояние - то, в котором его оставил "перемещатель" 

имелось ввиду не состояние конкретного объекта, а состояние любого объекта после перемещения..

Добавлено @ 12:20
Цитата(Sahab @  14.4.2012,  11:17 Найти цитируемый пост)
йопт... так можно или нельзя?

вообще применять move семантику нужно к rvalue...
но С++, как говорится, всегда готов придти на помощь, и можно применить move для lvalue,  однако в этом случае ответственность ложится на плечи программиста, а стандарт умывает руки  smile 

Это сообщение отредактировал(а) mes - 14.4.2012, 13:49


--------------------
PM MAIL WWW   Вверх
bsa
Дата 14.4.2012, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Цитата(mes @  14.4.2012,  13:18 Найти цитируемый пост)
но в С++, какк говорится, всегда готов придти на помощь, и можно применить move для lvalue, но в этом случае ответсвенность ложится на плечи программиста, а стандарт умывает руки
Классно сказано! Ёмко!
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0774 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.