Главная страница
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.051 c
14-1131899975
Alexey31
2005-11-13 19:39
2005.12.04
Как определить?


2-1132149733
IfBeginThenEnd
2005-11-16 17:02
2005.12.04
Частотные срезы


14-1131596363
Silvestr
2005-11-10 07:19
2005.12.04
Нежен компонент для вывода списка всего оборудования


8-1120716723
serko
2005-07-07 10:12
2005.12.04
Вопросики по MediaPlayer!


2-1131968060
igi
2005-11-14 14:34
2005.12.04
как сделать аналог dup()