Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.01.23;
Скачать: [xml.tar.bz2];

Вниз

Если мы создаём несколько 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.041 c
14-1104461424
Думкин
2004-12-31 05:50
2005.01.23
С днем рождения! 31 декабря


3-1103345345
slart
2004-12-18 07:49
2005.01.23
DateDiff+Access


4-1102065085
ZugZug
2004-12-03 12:11
2005.01.23
Определить, запущена ли другая прога


1-1105162791
DDDeN
2005-01-08 08:39
2005.01.23
Картинки для кнопок


14-1104725121
Думкин
2005-01-03 07:05
2005.01.23
С днем рождения! 3 января





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский