Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 25.10.2017
Сообщений: 16
1

Что происходит с указателями на данные статического класса в конструкторе перемещения?

24.11.2017, 19:22. Показов 1083. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Правильно я понимаю что если объект(класс) обернуть статик кастом, то конструктор перемещения T(T&&) просто отжимает указатели на данные и другие члены класса (и присваивает их кому-то)? Если это так, то что происходит с нашим старым объектом?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.11.2017, 19:22
Ответы с готовыми решениями:

Нюансы работы с указателями: объяснить, что происходит в заданном фрагменте кода
Всем доброго времени суток! Я не до конца разобрался в данной теме. К примеру, есть такой кусок...

Ошибка при вызове статического конструктора статического класса
Здравствуйте! Проблема в следующем: Есть класс public static class 1 { static...

Что значит const в конструкторе класса?
Здравствуйте, не понимаю что значит const в конструкторе класса. Встречался с const только когда он...

Что происходит когда передается в функцию базового класса аргумент с типом производного класса?
Есть функция перегруженного оператора"+" в производном классе и в базовом классе который принимает...

1
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
24.11.2017, 19:56 2
Лучший ответ Сообщение было отмечено edwin_paco как решение

Решение

Цитата Сообщение от edwin_paco Посмотреть сообщение
то что происходит с нашим старым объектом?
все, что с ним происходит - описано в этом самом конструкторе T(T&&)
который опустошает наш старый объект.

как правило - состояние перемещенного объекта считается "unspecified"
то бишь, некоторое "неизвестное" состояние,
при котором гарантируется:

1.
что опустошенный объект должен быть валидным.
как минимум, у него должен корректно отработать деструктор.

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


пример:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// обычный живой объект
std::string oldValue = "ololo";
 
// здесь мы его опустошили
// все важные данные oldValue перекочевали в newValue 
std::string newValue = std::move(oldValue);
 
// здесь мы не знаем, 
// в каком теперь состоянии теперь находится oldValue 
// но знаем, что он - живой, 
// то есть полностью в рабочем состоянии
// и если закончится его время жизни,
// то у него корректно отработает деструктор
 
// здесь мы установили опустошенному объекту новое состояние
oldValue  = "hello";
 
// и он теперь опять стал обычным объектом
// на конкретное состояние которого можно закладываться
 
std::cout << oldValue; // вывод: hello
но я хочу ещё раз подчеркнуть:
сама логика того, как происходит опустошение,
описывается в move-конструкторе
опустощающего класса.

что туда программист запишет - то и будет.
1
24.11.2017, 19:56
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.11.2017, 19:56
Помогаю со студенческими работами здесь

Что такое vals в конструкторе класса HashMap?
Здравствуйте! Подскажите, пожалуйста, что такое vals в приведённом ниже коде или где про это можно...

Инициализация шаблонного класса(В конструкторе класса после двоеточия вновь имя класса)
Всем доброго времени суток! Пытаюсь разобраться как работает приведенный мной код. Конкретно,...

Разбор класса, что в нем происходит
class Gruppa // класс данных Группа { private: const static int MAX_STUDENT = 30; Student*...

Что происходит с данными класса-наследника при таком приведении
изучал оф.мануал, рихтера и нейджела. залип вот на каком моменте: &quot;в С# нет специального...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru