Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как удалть объёкты из TObjectList и не уменьшишь при этом .... [D7, XP]


Константин ©   (2010-04-22 15:03:00) 

Как удалть объёкты из TObjectList и не уменьшишь при этом количество указателей? Надо в цикле for бежать по объектам и если таковой не подходит по условию делать ему Free или что то там (в зависимости от характера владения). После окончания цикла убить все указатели на объекты, которые мы удалили.


Игорь Шевченко   (2010-04-22 22:52:00) [1]

"Со дна я вытащил живого партизана,
Не знал он, бедный, что закончилась война"
(с) песня


Ega23   (2010-04-22 22:39:00) [2]


> А не проще ли:
>
> 1. ObjectList.OwnsObjects := True;
> 2.
> for i := list.Count-1 downto 0 do
>  if (list[i] = чему-то там) then
>    list.Delete(i);


А чёрт его знает, что ему там нужно. В принципе, достаточно downto и Delete. Но может оказаться, что недостаточно.


Омлет   (2010-04-22 20:03:00) [3]

> icWasya ©   (22.04.10 19:37) [7]

А не проще ли:

1. ObjectList.OwnsObjects := True;
2.
for i := list.Count-1 downto 0 do
 if (list[i] = чему-то там) then
   list.Delete(i);


icWasya   (2010-04-22 19:37:00) [4]

по условию сабжа требуется не [5] а
1. ObjectList.OwnsObjects := False;
2.

for i := list.Count-1 downto 0 do
  if (list[i] = чему-то там) then
  begin
    list[i].Free;
    llist[i]:=nil;
  end;


Константин   (2010-04-22 16:37:00) [5]

спасибо, точно, downto как раз пройдёт так как надо!


Омлет   (2010-04-22 15:10:00) [6]

Прочитай про OwnsObjects у TObjectList.


Ins   (2010-04-22 15:10:00) [7]

Насколько я понял вопрос, просто присвоить Item-у nil, но есть подозрение, что пройдись мы в цикле в обратном порядке (List.Count - 1 downto 0) вопрос бы и не возник


Ega23   (2010-04-22 15:10:00) [8]

1. ObjectList.OwnsObjects := False;
2.
 for i := list.Count-1 downto 0 do
   if (list[i] = чему-то там) then
   begin
     list[i].Free;
     list.Delete(i);
   end;


Германн   (2010-04-22 15:09:00) [9]


> Как удалть объёкты из TObjectList и не уменьшишь при этом
> количество указателей?

downto


Демо   (2010-04-22 15:08:00) [10]


> и если таковой не подходит по условию делать ему Free


В TObjectList не нужно Free выполнять для элементов. Нужно просто удалить элемент из списка.


Наверх

Титульная страница Поиск, карта сайта Написать письмо