|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
26.02.2012, 21:10 | #1 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,426
|
Списки. Присвоение илемента по индексу. Удаляется или в никуда?
Доброго времени суток!
Реализуя очередной класс: Код:
Код:
Если да, то как правильно? Последний раз редактировалось Человек_Борща; 26.02.2012 в 21:26. |
26.02.2012, 22:33 | #2 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
В SetItem просто запоминается адрес aItem. Если TFileInfo RECORD из QTypes, то должно выглядеть: Items[aIndex]:=Addr(aItem); сам объект нельзя удалять после этого, иначе при обращении к GetItem будет шах и мат
В GetItem соответственно: Result:=PFileInfo(Items[aIndex])^; Потери будут при удалении итемов из List без освобождения памяти занятой под TFileInfo
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
26.02.2012, 22:39 | #3 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,426
|
вообще-то мой TFileInfo это TObject... пока остановился на аком варианте:
Код:
|
26.02.2012, 22:43 | #4 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
Insert и закомментированный участок равнозначны
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
26.02.2012, 22:46 | #5 |
personality
Старожил
Регистрация: 28.04.2009
Сообщений: 2,882
|
Если TFileInfo это экземпляр некоего класса и Ваш наследник от TList просто хранит ссылку на созданный экземпляр (и больше этот экземпляр нигде не учитывается), то
Код:
Я в таких случаях переопределяю метод Add и не присваиваю в Items напрямую экземпляров. Если надо напрямую то можно написать доп. метод, который сперва освобождает старый объект а потом кладёт новый. А вообще если беспокойство о памяти, то ручками всё выверять в подобных методах, но это уже надо на постановку задачи смотреть, не всегда оправдана чистка объекта, бывают ведь и двойные ссылки, лист может просто хранит для каких-то целей. Я обычно реальное хранилище оборачиваю во что-то вроде фабрики, а остальные потребители могут просто хранить ссылку на объекты и только читать из хранилища фабрики нужные экземпляры. |
27.02.2012, 23:25 | #6 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,426
|
Я храню Tobject в Tlist.
Надо ли мне делать так: Код:
|
27.02.2012, 23:43 | #7 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
Если у вас больше нигде нет указателя на замещаемый объект, то это остается единственным местом где его можно и нужно убить. Иначе будут утечки. Только Insert неуместно, если замещаете. Вставит по индексу aIndex, а то что там раньше было станет по индексу aIndex+1. То что в #3 закоментировали и будет замещением, а Insert вставка с раздвиганием. В #4 я чепуху написал
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Последний раз редактировалось Аватар; 27.02.2012 в 23:52. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Однонаправленные списки на с или с++ | irina700000 | Помощь студентам | 0 | 28.01.2012 09:39 |
Обращение к массиву по индексу | Morgusha | Помощь студентам | 2 | 28.10.2009 15:03 |
Поиск по индексу (Delphi) | VadEr | Помощь студентам | 0 | 06.10.2009 19:03 |
Поток в никуда... | prizrak1390 | Работа с сетью в Delphi | 1 | 30.06.2008 10:32 |
Быстрый поиск по индексу | valerij | Microsoft Office Excel | 1 | 21.04.2008 11:04 |