![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
try..finally
valer4 © (2008-07-23 21:54:00)как правильно cделать 1) или 2)?
1)
with ExampleForm.Create(Self) do
try
Caption := 'Example';
ShowModal;
finally
Free;
end;
2)
with ExampleForm.Create(Self) do
begin
Caption := 'Example';
try
ShowModal;
finally
Free;
end;
end;
Anatoly Podgoretsky (2008-07-24 11:27:00) [1]palva © (24.07.08 10:33) [18]
У меня тоже такие сомнения зародились и не только по поводу автора.
Anatoly Podgoretsky (2008-07-24 11:26:00) [2]
> Мы же люди серьезные и считаем, что программы написаны программистами,
> а не дураками?
Зря ты так считаешь.
Anatoly Podgoretsky (2008-07-24 11:24:00) [3]
> А зачем её собственно в try except обертывать?
Что бы получить исключение в Finaly
Johnmen (2008-07-24 10:41:00) [4]
> Vlad Oshin © (24.07.08 10:33) [17]
> ... Если Caption := 'Example'; ...а если метод SetCaption
> вызывает еще кучу чего? :)
Ты на грани! Можешь свалиться в программерскую паранойю :)
palva (2008-07-24 10:41:00) [5]
> Vlad Oshin © (24.07.08 10:31) [16]
Само по себе Exception при создании объекта не страшен. Он может быть даже предусмотрен авторами класса и обрабатываться выше по иерархии. Использование try в [0] предназначено для того, чтобы free гарантированно выполнилось. А если Exception произошло при создании, то free выполнять не надо, поэтому Create стоит вне блока try.
Johnmen (2008-07-24 10:39:00) [6]
> palva © (24.07.08 10:33) [18]
А-а-а... Ну да...
Johnmen (2008-07-24 10:38:00) [7]
> Vlad Oshin © (24.07.08 10:31) [16]
> а если при создании, вызывается создание еще чего(стороннего),
> где возможна необработанная ошибка?
Мы же люди серьезные и считаем, что программы написаны программистами, а не дураками?
palva (2008-07-24 10:33:00) [8]
> Извини, не догнал...
Ну типа, если напишешь 2), то у большинства программистов, это прочитавших, возникнут вопросы о смысле жизни или сомнения в адекватности автора.
Вон у нас какая ветка образовалась!
Vlad Oshin (2008-07-24 10:33:00) [9]... Если Caption := 'Example'; ...
а если метод SetCaption вызывает еще кучу чего? :)
Vlad Oshin (2008-07-24 10:31:00) [10]а если при создании, вызывается создание еще чего(стороннего), где возможна необработанная ошибка?
это просто, накидал, где не создается, т.е. убитая память ни при чем
tFormQ = class(TForm)
end;
var
Form3: TForm3;
f:tformQ;
implementation
{$R *.dfm}
procedure TForm3.Button1Click(Sender: TObject);
begin
with f.Create(self) do // <--------- AV
begin
f.Show;
end;
end;
ANB (2008-07-24 10:20:00) [11]Создание объекта засовывать в блок нету смысла (во всяком случае - такой), т.к. если он не создаться, то и разрушать нечего будет.
Johnmen (2008-07-24 10:19:00) [12]
> palva © (24.07.08 10:10) [11]
Извини, не догнал...
> oldman © (24.07.08 10:13) [12]
> Тогда эта... Всю программу надо в try except запихивать
Ну если хочешь заложиться на битую память, то да.
Только битая память это проблема твоей программы?
ANB (2008-07-24 10:18:00) [13]
> Тогда эта... Всю программу надо в try except запихивать
Она и так засунута.
oldman (2008-07-24 10:13:00) [14]
> Если Caption := 'Example'; приводит к исключению, это значит,
> что не работает процессор, или память сбоит
Тогда эта... Всю программу надо в try except запихивать
palva (2008-07-24 10:10:00) [15]
> Если Caption := 'Example'; приводит к исключению, это значит,
> что не работает процессор, или память сбоит :))
>
Куда важнее позаботиться о душевном здоровье тех, кто будет читать этот код, а также о собственной репутации у коллег.
Johnmen (2008-07-24 10:08:00) [16]
> Vlad Oshin © (24.07.08 10:03) [8]
Исключение при несоздании объекта аналогично [5], т.е. компьютер неработоспособен.
Медвежонок Пятачок (2008-07-24 10:05:00) [17]а вот эта строка почему не в try?
А зачем её собственно в try except обертывать?
Vlad Oshin (2008-07-24 10:03:00) [18]with ExampleForm.Create(Self) do
а вот эта строка почему не в try?
ИМХО,
гораздо более большая вероятность, что форма не создаться, чем что ее не удасться показать.
Сергей М. (2008-07-24 09:47:00) [19]
> Johnmen © (23.07.08 22:19) [5]
>
> Если Caption := 'Example'; приводит к исключению, это значит,
> что
.. что автор крупно напортачил в своем проекте, что вовсе не исключено)
easy (2008-07-23 22:41:00) [20]try Object Pascal Language Guide