Текущий архив: 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.45 MB
Время: 0.008 c