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

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

Разрушение указателей


Sam Stone ©   (2005-11-14 13:51:00) 

Всем доброго времени суток :) Как-то раньше не задумывался над этим, а щас решил. Вопрос такой: когда надо сносить указатель в данной ситуации?
procedure A;
var p:TMyClass;
     t:TList;
begin
 t:=TList.create;
 p:=TMyClass.create;
 t.add(p);
end;
Это раз :)
А если в той же процедуре поправить код на:

t:=TList.create;
p:=TMyClass.create(какой-нибудь_параметр)
t.add(p);
//Если тут порушить, то с TList'а пропадет
//но тогда не получится ли мусор после следующего создания?
p:=TMyClass.create(какой-нибудь_другой_параметр)

t.add(p);

?
Или тут можно не волноваться, потому что переменные локальные и оно само после процедуры "полетит" куда надо? :)


Sam Stone   (2005-11-14 15:48:00) [1]

Спасибо.


Anatoly Podgoretsky   (2005-11-14 15:47:00) [2]

Они вообще здсь не нужны, прекрасно работает конструкция

t.add(TMyClass.create);


Leonid Troyanovsky   (2005-11-14 15:33:00) [3]


> Sam Stone ©   (14.11.05 14:38) [4]

> то есть не обращать внимания на локальные переменные TMyClass,
>  которые используются для добавления в список в процедурах?


Они на то и локальные (в [1] , вообще, в единственном экземпляре),
чтобы не беспокоится. Ведь ссылки на объекты сохраняются в списке.
Можно и вовсе без переменной - ol.Add(TMyObject.Create(..)), но
некоторые предпочитают обходится без with.

--
Regards, LVT.


Sam Stone   (2005-11-14 14:38:00) [4]


> Глобальные переменные - MD. Сделай список полем главной
> формы,
> создание в OnCreate, разрушение в OnDestroy.
> А, в остальном, пример by Digitman ©  (14.11.05 14:08) [1],
>  
> вполне подходящий

то есть не обращать внимания на локальные переменные TMyClass, которые используются для добавления в список в процедурах?


Leonid Troyanovsky   (2005-11-14 14:27:00) [5]


> Sam Stone ©   (14.11.05 14:19) [2]
> Я малость ошибся в первом посте:) Список определен как глобальная
> переменная, создается при запуске, разрушается при завершении
> работы, а в процессе в список этот добавляются элементы.
>  Так что пример из Digitman ©   (14.11.05 14:08) [1], думаю,
>  не совем подходящий.


Глобальные переменные - MD. Сделай список полем главной формы,
создание в OnCreate, разрушение в OnDestroy.
А, в остальном, пример by Digitman ©  (14.11.05 14:08) [1],
вполне подходящий.


>  В чем разница между Free и Destroy? Или никакой? :)


Destroy - для переопределения деструктора.
А Free - для повсеместного использования (проверяет на <> nil).

--
Regards, LVT.


Sam Stone   (2005-11-14 14:19:00) [6]

Я малость ошибся в первом посте:) Список определен как глобальная переменная, создается при запуске, разрушается при завершении работы, а в процессе в список этот добавляются элементы. Так что пример из Digitman ©   (14.11.05 14:08) [1], думаю, не совем подходящий.

ЗЫ
 В чем разница между Free и Destroy? Или никакой? :)


Digitman   (2005-11-14 14:08:00) [7]

var
 ol: TObjectList;
 obj: TObject;
..

ol := TObjectList.Create;
try

 obj := TMyClass.Create(..);
 ol.Add(obj);
...
 obj := TMyClass.Create(..);
 ol.Add(obj);
...

 obj := TMyClass.Create(..);
 ol.Add(obj);
...

finally
 ol.Free;
end;

и все !

и никакой головной боли по поводу утечек


Наверх

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