1 | |||||||||||
Временное сохранение массива = *this19.07.2018, 11:25. Показов 1272. Ответов 6
Метки нет (Все метки)
Привет.
Не понимаю как можно в данном примере перегрузки += (добавление элемента в конец массива) временно сохранить массив в *this. Ведь this указывает на адрес созданного объекта, но на какой именно? я что-то запутался в этой строке
и в обще почему return *this, если мы добавляем последний элемент в ptr?
0
|
19.07.2018, 11:25 | |
Ответы с готовыми решениями:
6
Временное сохранение stringgrid Временное сохранение данных страницы Временное сохранение данных с второй формы Сохранение массива в файл и чтение массива из файла |
зомбяк
1584 / 1218 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
|
||||||
19.07.2018, 11:29 | 2 | |||||
Адрес того объекта, который является первым операндом оператора +=. Т.е. в выражении
Ну и его копируют в локальную переменную. Добавлено через 1 минуту потому что в данном случае никакой разницы между ptr и this->ptr нет . Поскольку речь о функции класса.
1
|
19.07.2018, 11:37 [ТС] | 3 |
сохранили result в *this;
удалили ptr; увеличили размер массива; выделили память под ptr с новым размером. элементы с result.ptr копирнули в ptr; присвоили последним элементом в ptr наше значение... и вернули THIS почему this? ведь ptr же вроде. И для чего в обще сохранять массив result в *this? операции все проводим с ptr, его меняем, в него добавляем, а возвращаем другое. Добавлено через 1 минуту ладно, наверное я не до конца с this разобрался. Полностью логику не понимаю что тут в обще происходит. Хотя до этого примера с этим проблем не имел.
0
|
365 / 321 / 219
Регистрация: 21.02.2013
Сообщений: 756
|
||||||
19.07.2018, 11:39 | 4 | |||||
ну тут надо еще на оператор присвоения глянуть.
Потом стирается ptr данного объекта и заново выделяется память с размером на один больше. И уже из result объекта копируются данные.
0
|
1468 / 1009 / 456
Регистрация: 30.10.2017
Сообщений: 2,800
|
||||||||||||||||
19.07.2018, 11:52 | 5 | |||||||||||||||
Сообщение было отмечено Джон Кофи как решение
Решение
Эта строка создает временный объект, являющийся копией результата, передающийся в выражение, где вызывали операцию равенства. Нужно это для того, чтобы вычислялись выражения вида.
operator= и ссылка будет вести на удаленный объект.
1
|
19.07.2018, 12:44 [ТС] | 6 |
QuakerRUS, Спасибо большое за подробность, кажется понимаю
Добавлено через 48 минут QuakerRUS, result = *this || равносильно reuslt = this->(объект класса) ? Если мы не поставим указатель на this, то тогда копия объекта не создастся? (result = this)
0
|
1468 / 1009 / 456
Регистрация: 30.10.2017
Сообщений: 2,800
|
|
19.07.2018, 13:17 | 7 |
this->(объект класса) указывает на какой то элемент объекта Array, а мы должны указать на сам объект Array, то есть this. Операция
* разыменовывает объект.Не создается, так как в этом случае мы вернем адрес временного объекта, а не его копию. Добавлено через 27 минут И полагаю все же речь выше была о return *this , а не о result = this
1
|
19.07.2018, 13:17 | |
19.07.2018, 13:17 | |
Помогаю со студенческими работами здесь
7
временное добавление Временное подвисание Временное хранения ip Программно-временное устройство Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |