Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
14-1132218594
Ega23
2005-11-17 12:09
2005.12.04
А как можно узнать, какая версия ADO установлена


2-1132242954
Sysanin
2005-11-17 18:55
2005.12.04
Уменьшения размера в пямяти


14-1131695823
Mike Kouzmine
2005-11-11 10:57
2005.12.04
Рыжков выполняет свои обещания...


3-1129820365
DelphiLexx
2005-10-20 18:59
2005.12.04
Проблема в одноврем-ой работе с 2-мя БД InterBase


2-1132053293
Fer
2005-11-15 14:14
2005.12.04
помогите начать работать с SQL





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский