Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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

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

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

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

Не срабатывает move конструктор std::unique_ptr - C++
Всем привет! Битый час не пойму почему в списке захвата компилятор ругается на удаленный копирующий конструктор unique_ptr, если я его...

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

Не могу сделать чтобы класс содержал основной конструктор и конструктор копирования - C++
Разработать класс ThreeAngle для работы с плоскими треугольниками. В качестве членов-данных задаются длины трех сторон треугольника. Класс...

this(Всегда ли вызывается конструктор при не явной передачи объекта в конструктор) - C++
class Test { int i; public: void test(int i) { this -> i = i; } }; Конструктор Test::Test всегда вызывается...

Будет ли определен компилятором конструктор по умолчанию, если есть конструктор с дефолтным параметром? - C++
Добрый день, сразу к делу, есть некий класс class some { int x; public: some(int y = 1) : x(y) {} };

7
gromo
372 / 271 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
24.12.2013, 01:59  [ТС] #2
Cформулирую немного по-другому:
Сгенерированный по умолчанию move-конструктор делает что-либо, или он пуст?
0
I.M.
566 / 549 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
24.12.2013, 03:17 #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.

Ответ - сгенерированный по умолчанию конструктор перемещения не пустой. Он будет пытаться поочередно вызывать конструкторы перемещения у мемберов класса
1
gromo
372 / 271 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
24.12.2013, 04:16  [ТС] #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, наример, то он будет перемещен?
0
castaway
Эксперт С++
4926 / 3033 / 372
Регистрация: 10.11.2010
Сообщений: 11,084
Записей в блоге: 10
Завершенные тесты: 1
24.12.2013, 09:04 #5
А чем член-указатель отличается от любого другого члена?
0
ForEveR
В астрале
Эксперт С++
7994 / 4753 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
24.12.2013, 14:09 #6
gromo, Он будет перемещен, но в данном случае это эквивалентно поверхностному копированию.
1
gromo
372 / 271 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
24.12.2013, 14:22  [ТС] #7
Цитата Сообщение от castaway Посмотреть сообщение
А чем член-указатель отличается от любого другого члена?
В том смысле, что просто присвоить==переместить его значение члену другого экземпляра этого класса было бы не совсем правильно.
Цитата Сообщение от ForEveR Посмотреть сообщение
Он будет перемещен, но в данном случае это эквивалентно поверхностному копированию.
Спасибо. Это то, что я хотел узнать. Просто я думал, что сгенерированный по умолчанию move-конструктор оставит перемещенный член в valid, but unspecified state (ну или хотя бы обнулит указатель). Но, по-видимому, чтобы обеспечить такое минимальное поведение, его все-таки нужно самому переопределить.
0
castaway
Эксперт С++
4926 / 3033 / 372
Регистрация: 10.11.2010
Сообщений: 11,084
Записей в блоге: 10
Завершенные тесты: 1
25.12.2013, 08:11 #8
Как раз всё правильно, значение указателя скопируется/переместится.
0
25.12.2013, 08:11
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.12.2013, 08:11
Привет! Вот еще темы с ответами:

Создать класс. Написать конструктор по умолчанию, конструктор с параметрами. Перегрузить операции «меньше» и «равно» - C++
Помогите пожалуйста, хоть с одним из заданий. 1. Создать класс. Написать конструктор по умолчанию, конструктор с параметрами....

Не могу правильно сделать конструктор и конструктор копирования и принадлежность точки с заданными координатами треугольнику - C++
#include "stdafx.h" #include <iostream> #include <conio.h> #include <windows.h> #include <math.h> #include <algorithm> using...

Можно ли использовать конструктор по умолчанию и конструктор инициализации одновременно? - C++
Можно ли использовать конструктор по умолчанию и конструктор инициализации одновременно?

Конструктор производного класса требует конструктор предка - C++
Выдаёт вот такую вот ошибку: no matching function for call to 'Cube::Cube()' class Cube { protected: int magInt; bool...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

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