Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

try..finally


Страницы:   1 2

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


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо