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

Вниз

Как программно узнать удалён ли динамический компонент?   Найти похожие ветки 

 
Varfolomey   (2003-11-15 14:50) [0]

Есть такой код:
...........
var
X: Tqwe; { К примеру }
begin

X.Free; { Ошибка не возникает }
..........
X := Tqwe.Create;
X.Parent := Self; { Объект создается нормально }
..........
X.Free; { Удаляется нормально }
..........

{Здесь надо узнать удалён объект или нет}
X.Free; { Выдает ошибку }

Как узнать был удалён объект или нет?


 
MBo ©   (2003-11-15 14:55) [1]

Делай X:=nil после Free или используй FreeAndNil.
Тогда проверка на nil или Assigned поможет.


 
KSergey ©   (2003-11-15 15:02) [2]

Узнать указывает ли ссылка (X: Tqwe) на созданный объект или нет - невозможно.
Стандартная практика в таких случаях (если именно необходимо узнать создан объект или нет) - после его разрушения обнуляить ссылку на него (X := nil)
После можно будет всегда проверить равна ссылка nil или нет (соответственно объект не создан или создан). Проверить можно или проосто сравнением или ф-цией Assign. Есть прортивники ф-ции Assign, но лично я ни разу не напарывался на какие-либо проблемы при ее использовании. Вообще-то для того она и создана.
Уничтожыить объект и обнулить ссылку можно ф-цией FreeAndNil(X)

И еще хотелось бы сказать

> var
> X: Tqwe; { К примеру }
> begin
> X.Free; { Ошибка не возникает } а вот так делать не надо!
Не факт, что при входе в ф-цию X будет равно nil, а потому могут быть проблемы.


 
default ©   (2003-11-15 15:13) [3]

"Есть прортивники ф-ции Assign, но лично я ни разу не напарывался на какие-либо проблемы при ее использовании. Вообще-то для того она и создана."
если не ошибаюсь - это одно и тоже(не только по функции, но и по конечному коду), Assigned является макросом...


 
Anatoly Podgoretsky ©   (2003-11-15 15:14) [4]

Для чего, для повторного использования переменной, так это дорога к неприятностям, надо писать так, что бы узнавать не нужно.


 
default ©   (2003-11-15 15:21) [5]

KSergey © (15.11.03 15:02) [2]
вот щас посмотрел ещё на всякий...записи if Obj = nil then; и
if Assigned(Obj) then; полностью идентичны...одна и таже инструкция генерится...


 
KSergey ©   (2003-11-18 09:22) [6]

> [5] default © (15.11.03 15:21)
> KSergey © (15.11.03 15:02) [2]
> вот щас посмотрел ещё на всякий...записи if Obj = nil then;
> и
> if Assigned(Obj) then; полностью идентичны...одна и таже
> инструкция генерится...

Спасибо за ваше уточнения, однако я лично на форуме читал (к сожалению, не помню чье сообщение, но рассуждения шли о высоких матириях типа создения компонент ;), а потому человек был, думаю, не зеленый ;)) о том, что "с Assigned у меня были большие проблемы, если не хочешь их - не пользуйся"
Хотя лично у меня есть подозрение, что не в Assigned там было дело ;)

Если позволите, в будующем буду ссылаться на результаты ваших исследований ;)



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

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

Наверх




Память: 0.48 MB
Время: 0.016 c
1-89903
limk
2003-11-14 17:28
2003.11.27
memo


3-89766
ST_
2003-11-07 01:30
2003.11.27
Поле Boolean


3-89782
Vlad
2003-11-06 16:47
2003.11.27
Вопрос по InterBase & WinXP


4-90168
Denius
2003-10-01 20:04
2003.11.27
AetLayeredWindowAttributes объясните что не так делаю!


3-89706
lovres
2003-11-10 15:45
2003.11.27
Где взять help по работе с SMExport?