|
Модераторы: bsa |
|
Aoizora |
|
|||
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 18.11.2016 Репутация: нет Всего: нет |
Есть такой простой класс строки:
Некоторые вещи вызвали у меня недопонимание. 1. Класс я писал не полностью самостоятельно, а глядя на код из статьи, поэтому доверился чьему-то авторитету. Первое недопонимание вызвало то, что в конструкторе перемещения и в операторе присвоения при перемещении не освобождается память объекта, содержимое которого заменяется. Почему? Разве не будет утечки во всех функциях, связанных с rvalue-ссылками? 2. Почему при подборе функции во время выполнения b = a; вызывается не оператор присваивания при перемещении, а копирующий оператор присваивания? 3. И еще. Правильно ли я понимаю, что вся эта move-семантика создана только ради того, чтобы в зависимости от типа аргумента l- или r-value могли вызываться перегруженные функции для r-значений, в которых реализовано перемещение? Это попросту синтаксический сахар над перегрузкой функций? Это сообщение отредактировал(а) Aoizora - 9.4.2017, 18:22 |
|||
|
||||
volatile |
|
||||||
Эксперт Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 16 Всего: 85 |
В конструкторе объект еще не создан, поэтому освобождать нечего, там все правильно. В операторе, да там походу утечка, нужно сначала освободить память объекта, которому производится присваивание.
ну так и должно быть, это же копирование объекта. Объект "a" никуда не исчезает.
Это создано для повышения производительности. Классический оператор копирования может очень дорого стоить, перемещение - гораздо дешевле. (вместо всего объема памяти, копируется только указатель.) Это сообщение отредактировал(а) volatile - 9.4.2017, 22:41 |
||||||
|
|||||||
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |