Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.01.23;
Скачать: CL | DM;

Вниз

Если мы создаём несколько TStringList ов, то надо делать один   Найти похожие ветки 

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

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


 
Kerk ©   (2005-01-08 04:02) [1]

три


 
Kerk ©   (2005-01-08 04:03) [2]

если StringList"ов три...
иначе четыре, если их четыре.
...


 
Kerk ©   (2005-01-08 04:03) [3]

а вообще от ситуации зависит.. я б один блок сделал. :)


 
jack128 ©   (2005-01-08 04:05) [4]

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


 
jack128 ©   (2005-01-08 04:07) [5]

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


 
Conduct   (2005-01-08 04:08) [6]

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


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


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


А зачем nil ?


 
Kerk ©   (2005-01-08 04:14) [8]


> А зачем nil ?

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


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


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


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


 
Kerk ©   (2005-01-08 04:28) [10]


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

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


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


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

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


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


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


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

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


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


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


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


 
Kerk ©   (2005-01-08 05:33) [14]


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

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


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


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


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


 
Kerk ©   (2005-01-08 06:09) [16]

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


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


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


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


 
Kerk ©   (2005-01-08 06:27) [18]


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

в ДНК


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


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


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


 
Kerk ©   (2005-01-08 06:42) [20]

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


 
VMcL ©   (2005-01-08 10:03) [21]

>>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]

Нужен.


 
jack128 ©   (2005-01-08 15:11) [22]

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


 
VMcL ©   (2005-01-08 16:54) [23]

>>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, а не один.



Страницы: 1 вся ветка

Текущий архив: 2005.01.23;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.025 c
4-1101586279
TankMan
2004-11-27 23:11
2005.01.23
Кто-нибудь может дать примерчик в котором можно было-бы


4-1102331451
Makuha
2004-12-06 14:10
2005.01.23
Работа с файлами с помощью ф-ций _lopen и _lread.


1-1105050080
Colonel
2005-01-07 01:21
2005.01.23
Фокус формы, события OnMouseEnter, Leave


9-1097749181
Malefic
2004-10-14 14:19
2005.01.23
Как использовать AsphyreObjects?


3-1103614507
Dim!S
2004-12-21 10:35
2005.01.23
2 копии отчета на одной странице