как правильно проверять существование обьекта ?
знаю два способа
generic_icons: TStringList;
if Assigned(generic_icons) then
and
if generic_icons <> nil then
оба не правильные и не работают =)
Модератор: Модераторы
if generic_icons is TStringList then Label1.Caption := 'Yes'
else Label1.Caption := 'No';
Logo писал(а):А это всегда работает.
- Код: Выделить всё
if generic_icons is TStringList then Label1.Caption := 'Yes'
else Label1.Caption := 'No';
var generic_icons: TStringList = nil;
Try
{Любое обращение к объекту}
Except
on EAccessViolation do
ShowMessage('ФигВам а не объект');
End;
Mr.Smart писал(а):Logo писал(а):А это всегда работает.
- Код: Выделить всё
if generic_icons is TStringList then Label1.Caption := 'Yes'
else Label1.Caption := 'No';
Если переменная не инициализированна то получите ошибку доступа к памяти!
Logo писал(а):Я так понял, что у Attid не стандартная ситуация. Не тот уровень у него, чтобы не понять если переменная не nil, то ее не стоит проверять на nil.
Sergei I. Gorelkin писал(а):...И даже если они доступны, это может оказаться только что уничтоженный объект, который будет переписан через пару миллисекунд...
Проще следить за тем, что записывается в переменную.
Sergei I. Gorelkin писал(а):В общем случае это практически невозможно.
Attid писал(а):если его не создали. но передают как созданный
Max Rusov писал(а):Тогда другая (уже практически осмысленная) задача. Есть объект, из него вызывается какая-то процедура. В результате сложной, непредсказуемой последовательности событий при выходе из этой процедуры может оказаться так что наш объект уже был уничтожен, соотв. обращаться к его полям и свойствам нельзя. Хочется отследить эту ситуацию и как-то обработать, например кинуть Abort. Как это сделать наиболее эффективно?
Max Rusov писал(а):Пример задачи: есть некий интерфейс-билдер с кнопочками и событиями OnClick. Что напишут в обработчике OnClick -
заранее неизвестно, могут убить и кнопочку, и форму на которой она лежит. В "обычном" языке - это приведет к AV - сам дурак.
А вот в "защищенной" среде - хотелось бы выдать цивильную ошибку...
Вернуться в Free Pascal Compiler
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4