Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.12.04;
Скачать: CL | DM;

Вниз

Разрушение указателей   Найти похожие ветки 

 
Sam Stone ©   (2005-11-14 13:51) [0]

Всем доброго времени суток :) Как-то раньше не задумывался над этим, а щас решил. Вопрос такой: когда надо сносить указатель в данной ситуации?
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);

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


 
Digitman ©   (2005-11-14 14:08) [1]

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;

и все !

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


 
Sam Stone ©   (2005-11-14 14:19) [2]

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

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


 
Leonid Troyanovsky ©   (2005-11-14 14:27) [3]


> 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:38) [4]


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

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


 
Leonid Troyanovsky ©   (2005-11-14 15:33) [5]


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

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


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

--
Regards, LVT.


 
Anatoly Podgoretsky ©   (2005-11-14 15:47) [6]

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

t.add(TMyClass.create);


 
Sam Stone ©   (2005-11-14 15:48) [7]

Спасибо.



Страницы: 1 вся ветка

Текущий архив: 2005.12.04;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.028 c
2-1131952997
Wolferio
2005-11-14 10:23
2005.12.04
ShellListView i OleContainer


2-1132313011
Делфёст
2005-11-18 14:23
2005.12.04
работа с датами.


14-1131868987
QuasiLamo
2005-11-13 11:03
2005.12.04
mini DVD mp3 Player


14-1130429605
FeeR
2005-10-27 20:13
2005.12.04
Загрузочный сектор


4-1127833308
фывыч
2005-09-27 19:01
2005.12.04
о tprocessentry32