Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
gromo
370 / 269 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
#1

Тривиальный move конструктор - C++

19.12.2013, 23:55. Просмотров 804. Ответов 7
Метки нет (Все метки)

Всем привет.
Вобщем пишу код используя классы некой библиотеки, полагаясь, что в будущем разработчики добавят move-конструкторы в эти классы.
Следовательно сейчас используются определенные компилятором по-умолчанию move-конструкторы (тобишь тривиальные).

Вопрос: тривиальный move-конструктор генерируется пустым (получается тогда нету никакой выгоды в скорости) или тупо почленно перемещает все данные-члены класса (по образцу копирующего конструктора, сгенерированного компилятором по-умолчанию, который почленно копирует) ?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.12.2013, 23:55     Тривиальный move конструктор
Посмотрите здесь:

Move конструктор и его члены - C++
Добрый день, почему у "выпотрашеного" B&& b поле b.a не rvalue? #include <iostream> #include <utility> using namespace std; ...

Move конструктор && - C++
Никак не могу понять, что же он делает. Вроде как пишут, что он даже предпочтительнее, чем всякие const MyType& var в качестве параметров в...

std::move() - C++
Есть ли разница между следующими вещами: A = std::move(B); // and std::copy(B.begin(), B.end(), A.begin()); B.clear();

move семантика - C++
Сейчас стало появляться нечто вроде такого: class X { public: X (const X& lvalue); // copy constructor X (X&& rvalue);...

Move semantics в C++11 - C++
1. как вообще читать && ? ссылка на ссылку? как это работает? 2. в одном контейнере могут быть и copy и move конструкторы? а как тогда...

Std::move - C++
Добрый вечер, #include <iostream> using namespace std; class A { private: int x = 10; public: A(int q){ x = q; }

Поясните по move конструктору - C++
У меня есть такой вот конструктор, который получает на вход мултимап из парсера, в дальнейшем он ненужен. Как правильно прописать мув...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gromo
370 / 269 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
24.12.2013, 01:59  [ТС]     Тривиальный move конструктор #2
Cформулирую немного по-другому:
Сгенерированный по умолчанию move-конструктор делает что-либо, или он пуст?
I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
24.12.2013, 03:17     Тривиальный move конструктор #3
§ 12.8
15 The implicitly-defined copy/move constructor for a non-union class X performs a memberwise copy/move
of its bases and members.

Ответ - сгенерированный по умолчанию конструктор перемещения не пустой. Он будет пытаться поочередно вызывать конструкторы перемещения у мемберов класса
gromo
370 / 269 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
24.12.2013, 04:16  [ТС]     Тривиальный move конструктор #4
Цитата Сообщение от I.M. Посмотреть сообщение
§ 12.8
15 The implicitly-defined copy/move constructor for a non-union class X performs a memberwise copy/move
of its bases and members.
А если членом класса будет указатель на char, наример, то он будет перемещен?
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
24.12.2013, 09:04     Тривиальный move конструктор #5
А чем член-указатель отличается от любого другого члена?
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
24.12.2013, 14:09     Тривиальный move конструктор #6
gromo, Он будет перемещен, но в данном случае это эквивалентно поверхностному копированию.
gromo
370 / 269 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
24.12.2013, 14:22  [ТС]     Тривиальный move конструктор #7
Цитата Сообщение от castaway Посмотреть сообщение
А чем член-указатель отличается от любого другого члена?
В том смысле, что просто присвоить==переместить его значение члену другого экземпляра этого класса было бы не совсем правильно.
Цитата Сообщение от ForEveR Посмотреть сообщение
Он будет перемещен, но в данном случае это эквивалентно поверхностному копированию.
Спасибо. Это то, что я хотел узнать. Просто я думал, что сгенерированный по умолчанию move-конструктор оставит перемещенный член в valid, but unspecified state (ну или хотя бы обнулит указатель). Но, по-видимому, чтобы обеспечить такое минимальное поведение, его все-таки нужно самому переопределить.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.12.2013, 08:11     Тривиальный move конструктор
Еще ссылки по теме:

Изменить метод move - C++
привет всем! вот этод работает, #include <stdio.h> #include <stdlib.h> #include <conio.h> #include <dos.h> #include...

Optional и std::move - C++
добрый день. разбираясь в исходниках optional'а из gcc, я понял, что там нигде не делается инвалидным только что перемещенный объект. ...

Move semantics implementation.. - C++
Здравствуйте, форумчане.. При выполнении лабораторной застопорился на одном задании.. Вообще суть лабораторной: шаблоны классов +...

Что такое move семантика? - C++
Что такое move семантика? Добавлено через 6 минут Я правильно понимаю, что mov присваивание перемещает правый операнд на место...

Std::move stl-алгоритм - C++
здравствуйте, есть такой код: std::string his = "what the work ?"; std::istringstream isg(his); ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
25.12.2013, 08:11     Тривиальный move конструктор #8
Как раз всё правильно, значение указателя скопируется/переместится.
Yandex
Объявления
25.12.2013, 08:11     Тривиальный move конструктор
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru