Текущий архив: 2003.02.06;
Скачать: CL | DM;
ВнизО try..finally и создании объектов :) Найти похожие ветки
← →
Альф (2003-01-27 11:45) [0]Как будет обрабатываться
ini.Free();
при неудачном создании объекта ???
try
ini := TIniFile.Create("Какой-то ini");
finally
ini.Free();
end;{try}
И как правильно реализовывать такие конструкции ?
Заранее благодарен :)
← →
Mike Kouzmine (2003-01-27 11:51) [1]if Assigned(ini) then ini.free;
← →
Romkin (2003-01-27 11:54) [2]Не надо assigned, это во Free проверяется
ini := TIniFile.Create("Какой-то ini");
try
//Работаем с ini - Create точно прошел
finally
ini.Free;
end;{try}
</code
← →
Юрий Зотов (2003-01-27 11:58) [3]При любом exception в конструкторе созданный в нем объект автоматически в нем же и уничтожается. Поэтому правильно - не вносить создание в блок try, иначе повторное уничтожение объекта в finally даст повторное исключение. Вот две типовые схемы правильной работы с объектом:
Ini := TIniFile.Create(...);
try
...
finally
Ini.Free
end;
with TIniFile.Create(...) do
try
...
finally
Free
end;
← →
Альф (2003-01-27 12:00) [4]2Romkin © (27.01.03 11:54)
А почему НЕ ???
try
ini := TIniFile.Create("Какой-то ini");
тогда приexception
наTIniFile.Create
мы сразу попадаем наfinally
- а при таком создании:
ini := TIniFile.Create("Какой-то ini");
try
//Работаем с ini - Create точно прошел
внутриtry
ini может быть не определен ???
или делать так для страховки:
try
ini := nil;
ini := TIniFile.Create("Какой-то ini");
if Assigned(ini)
then //чего-то
← →
Альф (2003-01-27 12:05) [5]2Юрий Зотов © (27.01.03 11:58)
Спасибо.
Тогда выходит так нужно делать ???
try
ini := TIniFile.Create(...);
try
...
finally
Ini.Free();
end;{try2}
except
// Объект не создан
end;{try1}
← →
Chubais (2003-01-27 12:09) [6]Альф © (27.01.03 12:00)
А почему НЕ ???
ну подумай...
← →
Chubais (2003-01-27 12:10) [7]Альф © (27.01.03 12:05)
ага
← →
Альф (2003-01-27 12:12) [8]2Chubais © (27.01.03 12:10)
:))) - ну и ник у тя - в дрожь бросает
← →
Chubais (2003-01-27 12:16) [9]
> Альф © (27.01.03 12:12)
c xtuj "n& Ж;-))
← →
Chubais (2003-01-27 12:16) [10]
с чего эт? Ж;-))
← →
Альф (2003-01-27 12:19) [11]2Chubais © (27.01.03 12:16)
А отгадай с одного раза :)))
← →
Юрий Зотов (2003-01-27 12:24) [12]> Альф © (27.01.03 12:00)
Вот так делать как раз не нужно. Почему - я написал выше. И лищние проверки, и лишние присвоения тоже ни к чему.
> Альф © (27.01.03 12:05)
А вот так делать можно. Но обычно try-except не пишут, он просто не нужен. Внутренний try-except в конструкторе уничтожает объект и перевозбуждает исключение, поэтому он сам выдаст нужную диагностику. Дополнительный try-except (как у Вас) нужен только если мы хотим это исключение перехватить. Но имейте в виду, что Ваш код перехватыват не только исключения в конструкторе, а вообще все подряд.
← →
Chubais (2003-01-27 12:32) [13]Альф © (27.01.03 12:19)
неужто света нет и упс уже помирает? ))))))))
← →
Альф (2003-01-27 13:53) [14]2Юрий Зотов © (27.01.03 12:24)
Спасибо - еще большее чем в первый раз :)))
2Chubais © (27.01.03 12:32)
Свет есть - УПСа нет :(
Страницы: 1 вся ветка
Текущий архив: 2003.02.06;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.009 c