Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.11.27;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.008 c
1-89821
Миха
2003-11-17 09:39
2003.11.27
Маркеры в TChart


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


7-90149
Dev
2003-09-18 00:10
2003.11.27
Загоузка CPU


3-89709
Дельфин
2003-11-10 14:06
2003.11.27
Создание собственных компонентов в DELPHI 6





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский