![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Освобождение ресурса в finally
Arinyshka © (2008-04-23 12:17:00)
Страницы: < 1 2 ... 17 18 19 20 21 22 23 ... 32 33 >
Не подскажете еще один момент:
Есть процедура, выглядит примерно так
procedure TSetPayFrm.BtnAddImageClick(Sender: TObject);
var TempBitmap:TBitmap;
begin
if not(opendialog1.Execute) then exit;
try
TempBitmap := TBitmap.Create;
TempBitmap.LoadFromFile(OpenDialog1.FileName);
finally
TempBitmap.Free;
end;
end;
На освобождение TempBitmap.Free; выдает варнинг
[Warning] uSetPaymentMain.pas(313): Variable 'TempBitmap' might not have been initialized
Не смертельно, но непонятно... почему варнинг? При изменениии условия и включении всей конструкции в один блок begin..end ситуация не менялась.
Экс-Оригинал (2008-04-27 00:51:00) [381]
> Восхищенный (27.04.08 00:47) [270]
> > Экс-Оригинал (27.04.08 00:44) [268]С двух раз тебе тоже
> непонятно? Тогда ничем не могу помочь.
Ну что можно сказать на пустой трёп? Только развести руками.
Он, должно быть, очень невежественный человек, поскольку отвечает на все вопросы, которые ему задают./Франсуа Вольтер/
Восхищенный (2008-04-27 00:47:00) [382]> Экс-Оригинал (27.04.08 00:44) [268]
С двух раз тебе тоже непонятно? Тогда ничем не могу помочь.
Экс-Оригинал (2008-04-27 00:47:00) [383]
> Пока ты не появился, разговор шел о Delphi.
Уж ты точно своими последними высказываниями говоришь о Delphi.
Восхищенный (2008-04-27 00:45:00) [384]
> Loginov Dmitry © (27.04.08 00:42) [267]
Снова врешь.
Экс-Оригинал (2008-04-27 00:44:00) [385]
> Восхищенный (27.04.08 00:20) [264]
> > Экс-Оригинал (27.04.08 00:14) [263]Вот именно: не хочешь
> ничего говорить - не флуди.Пока ты не появился, разговор
> шел о Delphi.
Хорош демагогию разводить.
Докажи свою точку зрения или согласись, что трепаться нехорошо.
Loginov Dmitry (2008-04-27 00:42:00) [386]> Не ври.
Врать? Зачем мне это?
> В VCL сплошь и рядом код такого типа:
> захват ресурса или создание объекта
> try
> действия
> finally
> освобождение ресурса или уничтожение объекта
> end;
А также там сплошь и рядом код такого типа:
захват ресурса или создание объекта
захват ресурса или создание объекта
try
действия
finally
освобождение ресурса или уничтожение объекта
освобождение ресурса или уничтожение объекта
end;
Игорь Шевченко (2008-04-27 00:28:00) [387]столько известных анонимов развелось - диву даться
{RASkov} (2008-04-27 00:21:00) [388]> Я просмотрел исходники VCL для Delphi7 - там сплошь и рядом этот "дилетанский" код.
В VCL сплошь и рядом код такого типа:
захват ресурса или создание объекта
try
действия
finally
освобождение ресурса или уничтожение объекта
end;
Восхищенный (2008-04-27 00:20:00) [389]> Экс-Оригинал (27.04.08 00:14) [263]
Вот именно: не хочешь ничего говорить - не флуди.
Пока ты не появился, разговор шел о Delphi.
Экс-Оригинал (2008-04-27 00:14:00) [390]
> Не надо меня разводить, не выйдет.
Еще чего - разводить.
> Не хочешь принимать на веру - не принимай, никто не заставляет.
Ты не мессия.
Не хочешь ничего говорить - не флуди.
Восхищенный (2008-04-27 00:01:00) [391]> Экс-Оригинал
Не надо меня разводить, не выйдет. Я ж тебе сказал, что доказывать я никому ничего не собираюсь. И объяснил, почему (и прав оказался).
Не хочешь принимать на веру - не принимай, никто не заставляет.
> Loginov Dmitry © (26.04.08 22:22) [261]
Не ври.
Loginov Dmitry (2008-04-26 22:22:00) [392]> Доказать можно, но слишком долго - это раз
Пока доказательств не будет, можно считать, что
а) доказать это нельзя
б) доказывать вам просто лень
Насчет [255]. Я просмотрел исходники VCL для Delphi7 - там сплошь и рядом этот "дилетанский" код. Получается, что все, кто Дельфю разрабатывает - дилетанты. А дилетанты не умеют программировать и не знают Delphi. Приходим к однозначному выводу: разработчики Delphi не знают Delphi! Как вам?
Экс-Оригинал (2008-04-26 21:10:00) [393]
> Восхищенный (26.04.08 20:40) [258]
Сорри, пред. пост от меня. Немного дурковал в трёпе.
Пёсик В (2008-04-26 21:07:00) [394]
> 2. Два присваивания подряд:A := nil;try A := TSomeClass.
> Create; ...это код дилетанта.
Хотелось бы вот насчет этого комментарий услышать.
Первая строка присваивание, а вторая - выполнение функции, и лишь потом присваивание.
Так что это не одинаковые присваивания.
> Ты же видишь - [255] было просто проигнорировано (хотя
> не совсем - улыбнулся).
Я же не о [255] говорю, а о твоих высказываниях.
> Доказать можно, но слишком долго - это раз.
Ну хотя бы основные мысли, ведь сам сказал -
> Поскольку профи в этом и так не нуждаются, а дилетанты все
> равно не поймут.
Не считаю себя дилетантом, однако мысль твоя мне непонятна.
> Каждый, кто хочет, может просто принять на веру...
С какой стати?
Восхищенный (2008-04-26 20:40:00) [395]> Экс-Оригинал (26.04.08 20:20) [256]
Вряд ли я нуждался в комментариях и уж тем более в поощрениях.
Насчет [254] - доказывать я никому ничего не собираюсь. Ты же видишь - [255] было просто проигнорировано (хотя не совсем - улыбнулся).
Доказать можно, но слишком долго - это раз. И некому - это два. Поскольку профи в этом и так не нуждаются, а дилетанты все равно не поймут.
Каждый, кто хочет, может просто принять на веру - и его код станет лучше.
Экс-Оригинал (2008-04-26 20:21:00) [396]
> Восхищенный (25.04.08 18:30) [250]
PS.
А дискуссию провёл на ++ ;)
Экс-Оригинал (2008-04-26 20:20:00) [397]
> Только так. И всякие иные рассуждения на эту тему есть попытки
> подвести базу под лень и дилетантизм.
Это твои личные мысли? Или мысли неких "Классиков"?
На чем основаны твои безапелляционные утверждения?
НАсчет Конопки и снобизма ты молодец, но надо не только чужие утверждения опровергать, но и свои доказывать.
Я поначалу тоже удумал в защите группы ресурсов некоторую неправильность.
Но доказать эту неправильность не смог для себя.
Если у тебя есть конкретные аргументы, а не просто догматические утверждения, то сюда их, пожалуйста.
Loginov Dmitry (2008-04-26 12:40:00) [398]> 2. Два присваивания подряд:
> A := nil;
> try
> A := TSomeClass.Create;
> ...
> это код дилетанта.
> 3. Код, в котором пытаются защитить сразу группу ресурсов
> одним try:
> try
> O1 := TSomeClass1.Create;
> O2 := TSomeClass2.Create;
> ...
> ON := TSomeClassN.Create;
> ...
> finally
> O1.Free; // Или FreeAndNil
> O2.Free;
> ...
> O3.Free;
> end;
> тоже код дилетанта.
Очень жаль, что Delphi и VCL разрабатывают одни дилетанты. Грустно даже... :(
Восхищенный (2008-04-26 12:01:00) [399]1. "Этого не случится никогда, потому что вероятность этого очень мала и потому что в моей практике такого еще ни разу не случалось" - очень распространенный (к сожалению) взгляд дилетантов.
2. Два присваивания подряд:
A := nil;это код дилетанта.
try
A := TSomeClass.Create;
...
3. Код, в котором пытаются защитить сразу группу ресурсов одним try:
try
O1 := TSomeClass1.Create;
O2 := TSomeClass2.Create;
...
ON := TSomeClassN.Create;
...
finally
O1.Free; // Или FreeAndNil
O2.Free;
...
O3.Free;
end;
тоже код дилетанта.
4. И только вот такой код:
захват_одного_ресурса;
try
...
finally
освобождение_этого_ресурса
end;
это правильный, профессиональный код. И при грамотном структурировании программы глубина вложенности try в одном методе в 99.9% случаев не превышает трех (что вполне нормально и вполне читаемо). В оставшемся 0.1% сколько нужно вложенных try - столько и нужно честно писать, а не халтурить. Но сначала, как совершенно верно заметил Palladin, стоит задуматься - а все ли хорошо в консерватории?
Только так. И всякие иные рассуждения на эту тему есть попытки подвести базу под лень и дилетантизм.
Anatoly Podgoretsky (2008-04-26 00:57:00) [400]> Loginov Dmitry (25.04.2008 20:45:12) [252]
Программисты ИБМ тоже так говорили, когда придумывали формат даты для ДОС и БИОС