Форум: "Начинающим";
Текущий архив: 2005.12.04;
Скачать: [xml.tar.bz2];
ВнизРазрушение указателей Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.053 c