![]() |
Модераторы: Snowy, MetalFan, bems, Poseidon |
![]() ![]() ![]() |
|
K0T9I |
|
||||
Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 20.11.2009 Репутация: нет Всего: 2 |
я не могу понять, как организовать метод Pop для стека с объектами классов. если методом Pop возвращать ссылку на объект, то вернется nil если в Pop предварительно копировать возвращаемый объект и возвращать уже копию, то как потом ее удалить?
|
||||
|
|||||
bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 18 Всего: 88 |
Вернется точно то та ссылка, которая была в списке до удаления, а не nil.
Чтобы она оставалась валидной, добавь классу TSampleList метод Extract, который будет удалять элемент из списка, но не будет удалять его (таким образом Delete сведется к Extract и Free). Ну и Pop будет вызывать Extract Добавлено @ 01:18 А за освобождение должен отвечать код, вызывающий рор. Добавлено @ 01:28
Это сообщение отредактировал(а) bems - 27.9.2010, 01:35 -------------------- Обижено школьников: 8 |
|||
|
||||
K0T9I |
|
|||
Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 20.11.2009 Репутация: нет Всего: 2 |
bems, спасибо, натолкнул на мысль.
тему можно закрывать. |
|||
|
||||
bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 18 Всего: 88 |
Это не решение. Что будет если вызывающий код вызовет Рор, когда результат предыдущего вызова еще используется?
-------------------- Обижено школьников: 8 |
|||
|
||||
K0T9I |
|
||||
Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 20.11.2009 Репутация: нет Всего: 2 |
будет то, что результат предыдущего вызова станет равен результату нового вызова. я не ищу универсального решения, в моем случае Pop вызывается снова только по окончании обработки предыдущего вызова. а на крайний случай:
Это сообщение отредактировал(а) K0T9I - 27.9.2010, 02:35 |
||||
|
|||||
bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 18 Всего: 88 |
Стандартное поведение в таких случаях - при Push стек принимает объект во владение, при Pop - передаёт во владение вызвавшему.
Но как хочешь... -------------------- Обижено школьников: 8 |
|||
|
||||
K0T9I |
|
|||
Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 20.11.2009 Репутация: нет Всего: 2 |
хм, чего не знал, того не знал. гугл выдает малозначительные примеры и описание подобное "первый зашел - последний вышел" спасибо еще раз, буду думать. тему все равно можно закрыть |
|||
|
||||
bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 18 Всего: 88 |
Ну я немного неверно выразился. Правильно: _если_ при Push стек принимает объект во владение, _то_ при Pop - передаёт во владение вызвавшему. Поскольку у тебя при Delete в списке делается Free, то я делаю вывод, что твой список владеет объектами.
А тему закрывать ни к чему, просто пометь вопрос решенным -------------------- Обижено школьников: 8 |
|||
|
||||
Qu1nt |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 602 Регистрация: 13.1.2007 Репутация: 22 Всего: 50 |
Это сообщение отредактировал(а) Qu1nt - 27.9.2010, 09:41 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |