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

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

Если мы создаём несколько TStringList'ов, то надо делать один [D7]


Страницы:   1 2

Conduct ©   (2005-01-08 04:00:00) 

блок try finally, или три ?


VMcL   (2005-01-08 16:54:00) [1]

>> jack128 ©  (08.01.05 15:11) [22]

Тьфу, блин. Написал совсем не то, что хотел. Вот:
SL1 := nil;
SL2 := nil;
SL3 := nil;
try
  SL1 := TStringList.Create;
  SL2 := TStringList.Create;
  SL3 := TStringList.Create;
  // do something with SL1, SL2, SL3
finally
  SL3.Free;
  SL2.Free;
  SL1.Free;
end;


Но опять же: лучше так не делать. Не убудет, если написать три try-finally, а не один.


jack128   (2005-01-08 15:11:00) [2]

VMcL ©   (08.01.05 10:03) [21]
не-а. Вероятностью исключения при созданиилистов не стоит принебрегать. Все таки при этом память запрашиваются, а её может и не хватать..


VMcL   (2005-01-08 10:03:00) [3]

>> jack128 ©  (08.01.05 04:05) [4]

Тогда уж так, ИМХО:

SL1 := TStringList.Create;
SL2 := TStringList.Create;
SL3 := TStringList.Create;
try
  // do something with SL1, SL2, SL3
finally
  SL3.Free;
  SL2.Free;
  SL1.Free;
end;


Но лучше так не делать всё-таки. Не убудет, если написать три try-finally, а не один.

>> Conduct  (08.01.05 06:40) [19]

Нужен.


Kerk   (2005-01-08 06:42:00) [4]

Conduct   (08.01.05 6:40) [19]
О, мля... орех... :)))))))))))))))))))))))))


Conduct   (2005-01-08 06:40:00) [5]


> Kerk ©   (08.01.05 06:27) [18]
>
> > Откуда ? В чём ошибка то ?
>
> в ДНК


Ну, теперь то ты наконец понял, что nil там был не нужен ?


Kerk   (2005-01-08 06:27:00) [6]


> Откуда ? В чём ошибка то ?

в ДНК


Conduct   (2005-01-08 06:25:00) [7]


> Kerk ©   (08.01.05 06:09) [16]
> Conduct   (08.01.05 6:07) [15]
> внутри TScringList.Create ошибки быть не может?


Откуда ? В чём ошибка то ?


Kerk   (2005-01-08 06:09:00) [8]

Conduct   (08.01.05 6:07) [15]
внутри TScringList.Create ошибки быть не может?


Conduct   (2005-01-08 06:07:00) [9]


> Kerk ©   (08.01.05 05:33) [14]
>
> > А откуда тут может взяться эксэпшн ?
>
> Издеваешься?


Почему ? Просто спрашиваю. По-моему неоткуда ...


Kerk   (2005-01-08 05:33:00) [10]


> А откуда тут может взяться эксэпшн ?

Издеваешься?


Conduct   (2005-01-08 04:53:00) [11]


> эти строки не обязаны выполняться... ексепшен может вылезти
> какой-нибудь.. нехватка ресурсов итд


А откуда тут может взяться эксэпшн ?


Kerk   (2005-01-08 04:38:00) [12]


> А какая может возникнуть ошибка в приведённом вами
> коде ?


> sl2 := TStringList.Create;
> sl3 := TStringList.Create;

эти строки не обязаны выполняться... ексепшен может вылезти какой-нибудь.. нехватка ресурсов итд


Conduct   (2005-01-08 04:36:00) [13]


> Kerk ©   (08.01.05 04:28) [10]
>
> > А разве они в вашем коде могут быть не созданы ?
>
> могут.. если в процессе из создания ошибка возникнет

А какая может возникнуть ошибка в приведённом вами коде ?


Kerk   (2005-01-08 04:28:00) [14]


> А разве они в вашем коде могут быть не созданы ?

могут.. если в процессе из создания ошибка возникнет


Conduct   (2005-01-08 04:27:00) [15]


> Kerk ©   (08.01.05 04:14) [8]
> так как блок finally выполнится в любом случае, независимо
> от того были ли созданы листы,


А разве они в вашем коде могут быть не созданы ?


Kerk   (2005-01-08 04:14:00) [16]


> А зачем nil ?

так как блок finally выполнится в любом случае, независимо от того были ли созданы листы, он присваивает им нил.. чтоб с Free проблем не было в случае их не создания


Conduct   (2005-01-08 04:12:00) [17]


> jack128 ©   (08.01.05 04:05) [4]
> Я предпочитаю так писать:
> sl2 := nil; sl3 := nil;


А зачем nil ?


Conduct   (2005-01-08 04:08:00) [18]

А я один делал. Ну, ладно. Три, так три.


jack128   (2005-01-08 04:07:00) [19]

Так вероятность возникновения исключения в деструкторе stringlist'а стремится к нулю, то имхо нормальный подход..


jack128   (2005-01-08 04:05:00) [20]

Ну не знаю.. Меня такое кол-во вложеныых блоков напрягает.. Я предпочитаю так писать:
sl2 := nil; sl3 := nil;
sl1 := TStringList.Create;
try
 sl2 := TStringList.Create;
 sl3 := TStringList.Create;
finally
 sl1.Free; sl2.Free; sl3.Free;
end;


Страницы:   1 2

Наверх

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