Запутался с указателями

 
0
 
Delphi, Kylix and Pascal
ava
Isaev | 28.03.2013, 17:33
Доброго времени суток!
Что-то я завис в простом месте совсем, требуется свежий взгляд на проблему)
Есть массим с данными, каждый элемент которого является записью со сложной структурой

  PElem=^TElem;
  TElem=Record
...
        txt:String;
...
   End;

...
Var
   Elems:Array Of TElem;

нужно создать ListBox c Elems[n].txt (некоторыми по фильтру выборочно) и привязываем к Items соответствующие элементы массива для доступа


Var
  NewElem:PElem;
Begin
...
// тут встрял... надо через New(NewElem) создавать, а потом присваивать или сразу присвоить и как?
NewElem^:=Pumps[I];
FLBox.Items.AddObject(' '+NewPump^.Model,TObject(NewPump));
...
и надо ли потом освобождать?
End;

Заранее благодарен
Ответы (10)
ava
Isaev | 28.03.2013, 19:28 #
мне в AddObject указатели надо добавить на элементы массива просто по идее, чтобы не дублировать данные лишние
ava
bems | 28.03.2013, 21:38 #
может быть вместо NewElem^:=Elems[I]; имелось в виду NewElem:[email protected][I]; ?
ava
Isaev | 28.03.2013, 22:48 #
bems, точно, благодарю!  smile 
ava
northener | 28.03.2013, 23:14 #
Цитата (Isaev @  28.3.2013,  22:48 findReferencedText)
т.е. обычный ListBox.Clear; эти все указатели тоже уничтожит?

Не уничтожит, а удалит из своего списка.
ava
Isaev | 29.03.2013, 00:57 #
Цитата (northener @  28.3.2013,  23:14 findReferencedText)
Не уничтожит, а удалит из своего списка. 

не надо меня ещё больше путать)
не одно ли это и то же? если мы говорим о указатете, то удалить его из списка и уничтожить это одно и то же ведь
или всё же есть вероятность утечки памяти?
ava
northener | 29.03.2013, 01:21 #
Цитата (Isaev @  29.3.2013,  00:57 findReferencedText)
не одно ли это и то же? если мы говорим о указатете, то удалить его из списка и уничтожить это одно и то же ведь

Нет. Не одно и тоже.
Попробую подсказать некую аналогию.
Представь себе телефонный справочник отпечатанный в типографии. В нём есть/напечатан телефонный номер человека/квартиры/фирмы. Но этот справочник большой и тяжелый. Носить его с собой - только дурак будет. А умный возьмёт маленькую записную книжку и запишет нужный ему сегодня/завтра/послезавтра телефонный номер карандашом.
Послепослезавтра он решит, что этот номер ему уже не интересен. (Неважно звонил ли он по этому номеру или нет). И он сотрёт ластиком эту запись в своей записной книжке.
Удалится ли при этом запись в телефонном справочнике? Удалится ли при этом сам телефонный номер?
Очевидно что два раза нет.
ava
Isaev | 29.03.2013, 04:19 #
northener,
Цитата (northener @  29.3.2013,  01:21 findReferencedText)
он сотрёт ластиком эту запись в своей записной книжке. 

Удалится ли при этом запись в телефонном справочнике?

так о том и речь, это вы не внимательны просто...
я писал уничтожатся указатели(или "удалятся из списка" как написали вы) на записи, а не сами данные.

ava
Чучмек | 29.03.2013, 09:30 #
Цитата (Isaev @  29.3.2013,  04:19 findReferencedText)
я писал уничтожатся указатели
 А как они могут не уничтожится? Или как ты сам можешь их уничтожить??
ava
northener | 30.03.2013, 01:42 #
Цитата (Isaev @  29.3.2013,  04:19 findReferencedText)
northener, 

Цитата(northener @  29.3.2013,  01:21 Найти цитируемый пост)

он сотрёт ластиком эту запись в своей записной книжке. 

Удалится ли при этом запись в телефонном справочнике?



так о том и речь, это вы не внимательны просто... 

я писал уничтожатся указатели(или "удалятся из списка" как написали вы) на записи, а не сами данные.


Это вы не поняли мой пример.  
Записи в своей записной книжке FLBox вы сотрёте вызовом FLBox.Clear.
Записи в телефонной книге  Elems:Array Of TElem; никуда не денутся. Как они там были, так и останутся.
Ну а сами номера TElem=Record будут жить долго и возможно счастливо, пока вы не вызовете сами Dispose или FreeMem для каждого из них.
ava
Isaev | 31.03.2013, 16:55 #
на этом прикрою, спс bems, за быстрый и в тему ответ smile 
Зарегистрируйтесь или войдите, чтобы написать.
Фирма дня
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Участники
advanced
Отправить