![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Если мы создаём несколько TStringList'ов, то надо делать один [D7]
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;