|
42 / 42 / 17
Регистрация: 25.04.2014
Сообщений: 499
|
||||||
Конструктор перемещения30.03.2015, 23:08. Показов 10538. Ответов 17
Метки нет (Все метки)
Здравствуйте, пытаюсь уже некоторое время разобраться с move-семантикой. Честно говоря возникли сложности сразу же. Помогите пожалуйста разобраться.
вот например такой элементарный код:
create Base create copy Base create move Base deleting Base deleting Base deleting Base если закомментить конструктор перемещения, то будет: create Base create copy Base create copy Base deleting Base deleting Base deleting Base Вопрос: почему этот move-конструктор вызывается, т.е. что он и куда перемещает?
0
|
||||||
| 30.03.2015, 23:08 | |
|
Ответы с готовыми решениями:
17
Конструктор перемещения
|
|
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
|
|
| 30.03.2015, 23:15 | |
|
1
|
|
|
42 / 42 / 17
Регистрация: 25.04.2014
Сообщений: 499
|
|
| 30.03.2015, 23:27 [ТС] | |
|
rikimaru2013, можете пояснить? честно говоря не понял ничего
0
|
|
|
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
|
||
| 30.03.2015, 23:33 | ||
|
а пока ссылки по теме: http://habrahabr.ru/post/183454/ http://stackoverflow.com/quest... -semantics
1
|
||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||||
| 30.03.2015, 23:46 | ||||||
Сообщение было отмечено tapochka как решение
Решение
http://rextester.com/TLW95742
2
|
||||||
|
47 / 47 / 23
Регистрация: 14.04.2013
Сообщений: 188
|
|
| 31.03.2015, 00:10 | |
|
Студия 2013
0
|
|
|
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
|
|
| 31.03.2015, 00:29 | |
|
0
|
|
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||
| 31.03.2015, 00:42 | |||
|
NRVO - стандартизированная оптимизация. от прочих оптимизаций компилятора отличается тем, что все компиляторы обязаны её поддерживать. но будучи именно оптимизацией, компиляторы не обязаны её задействовать, если конфигурация сборки "debug". просто соберите проект в режиме "release", и все будет ок.
2
|
|||
|
42 / 42 / 17
Регистрация: 25.04.2014
Сообщений: 499
|
|
| 31.03.2015, 05:42 [ТС] | |
|
всем спасибо за ответы, походу надо сначала с rvalue разобраться толком, затем RVO/NRVO, а затем уже с std::move
Добавлено через 1 час 16 минут согласно http://en.cppreference.com/w/cpp/utility/move возвращаемое значение std::move имеет тип static_cast<typename std::remove_reference<T>::type&&>(t). То есть в вышеприведенном примере hoggy объект a после std::move(a) становится rvalue-ссылкой(временным объектом) или нет? То есть поэтому у этой переменной после std::move(a) состояние как uncpecified или по другой причине?
0
|
|
|
Неэпический
|
|||
| 31.03.2015, 05:49 | |||
|
Можете заглянуть в соседнюю тему Std::move В каком состоянии оставлять объект после перемещения дело 'разработчика', который и определяет, что будет происходить при перемещении. Собственно поэтому и получается
1
|
|||
|
42 / 42 / 17
Регистрация: 25.04.2014
Сообщений: 499
|
|
| 31.03.2015, 06:06 [ТС] | |
|
0
|
|
|
42 / 42 / 17
Регистрация: 25.04.2014
Сообщений: 499
|
||||||
| 31.03.2015, 06:39 [ТС] | ||||||
|
в вашем примере если написать так:
0
|
||||||
|
Неэпический
|
|||
| 31.03.2015, 06:43 | |||
|
Тот код предназначен для показа именно в том виде, в котором показан и не иначе.
Может сначала Вам стоит подтянуть более простые вещи, а не rvalue-reference?
1
|
|||
|
42 / 42 / 17
Регистрация: 25.04.2014
Сообщений: 499
|
||||||||||||
| 31.03.2015, 07:10 [ТС] | ||||||||||||
|
Добавлено через 17 минут теперь я сам ответил на свой вопрос, заданный в самом начале: конструктор перемещения вызывается когда создается rvalue-ссылка, т.е. когда пишем:
а когда пишем:
на сегодня можно идти спать наконец-то...
0
|
||||||||||||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||||||||||
| 31.03.2015, 14:47 | ||||||||||||
Сообщение было отмечено tapochka как решение
Решениеобъект, который изначально был самым обычным lvalue, но насильственно был приведен к rvalue, стандарт обозвал xvalue вообще, rvalue - это объект, который может находится только с правой стороны выражения. различают prvalue и xvalue. prvalue - это "настоящий rvalue" пример:
время жизни которого - до конца всего выражения, где он был создан. то бишь, он - гарантированно не жилец. это открывает пути для оптимизаций: если объект не жилец, то его можно смело ограбить, потому что он все равно сдохнет, и никому уже не нужен. главное, что бы у него диструктор оставался рабочим. но для этого нужно как то различать: кто тут временный, а кто не временный. вот так в с++11 и появился новый тип данных r-value reference, который мы и наблюдаем в move конструкторах благодаря чему и стало возможным опустошать временные объекты --------------------------------------------------------------------- но тогда возникает проблема приведений типов. ведь технически, мы можем привести обычный lvalue к rvalue. а значит сделать вид "будто бы у нас тут временный объект". другими словами, мы можем опустошить объект, который по факту рождения нефига не временный:
с точки зрения функций, между prvalue и xvalue разницы нет. функции не различают что есть prvalue, а что xvalue. для них они все - rvalue однако стандарт рекомендует: после опустошения, опустошенный объект может находится в любом состоянии, но он должен быть работоспособным. это связанно именно с xvalue, который после опустошения нефига не сдохнет, и может быть и дальше использован в программе.
2
|
||||||||||||
|
42 / 42 / 17
Регистрация: 25.04.2014
Сообщений: 499
|
||
| 31.03.2015, 17:24 [ТС] | ||
|
0
|
||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||
| 31.03.2015, 18:09 | ||
|
после того, как вы посетили опустошенному объекту новое состояние, он опять становится самым обычным объектом. и с ним можно делать все тоже самое, что и с обычным объектом.
1
|
||
| 31.03.2015, 18:09 | |
|
Помогаю со студенческими работами здесь
18
Не работает конструктор перемещения (C++11) Конструктор перемещения и оптимизация
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|
Фото: Daniel Greenwood
kumehtar 13.11.2025
|