![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Разрушение указателей
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;
и все !
и никакой головной боли по поводу утечек