Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.08.2010, 12:13   #11
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Ins
Если она тебя смущает ничего не мешает тебе использовать метод Free.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.08.2010, 12:14   #12
Ins
Форумчанин
 
Регистрация: 29.12.2007
Сообщений: 137
По умолчанию

Достаточно простого Free
Цитата:
Если она тебя смущает ничего не мешает тебе использовать метод Free.
Так сказал, как будто бы одно и то же Разница между i := nil и i.Free в том, что первое - это НЕ ПРАВИЛЬНО, и приводит к утечке ресурсов, а второе - это ПРАВИЛЬНО. Допускаю, что есть люди для которых эта разница не существенна...

Последний раз редактировалось Ins; 11.08.2010 в 12:16.
Ins вне форума Ответить с цитированием
Старый 11.08.2010, 12:18   #13
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Обосновывай свои претензии.
Обосновываю:

Код:
i := nil;
Причина: очевидна.

Код:
i:=TIniFile.Create(ExtractFilePath(ParamStr(0))+'File1.ini');
// где try?
Причина: если в блоке кода ниже что-то пойдёт не так - получаем утечку памяти.

Цитата:
Для примера этого вполне достаточно.
Согласен. Я бы промолчал, если бы дело было только в отсутствии try. Но i := nil?!

Цитата:
Человек сам в состоянии догодаться что try..except нужны.... иначе догодается отладчик.. =)
Во-первых, try/finally, а не try/except, а во-вторых, человек сам не догадается.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 11.08.2010, 12:19   #14
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Так сказал, как будто бы одно и то же
Нет. Это не одно и то же, но тем не менее в некоторых ситуациях я не использую Деструкторы.
Цитата:
Причина: очевидна.
Ты будешь удивлен но Free не всегда верный способ. На нем тоже можно проколоться.
Цитата:
если в блоке кода ниже что-то пойдёт не так - получаем утечку памяти.
Если в блоке ниже что-то пойдет не так это свидетельство того что программу нужно поправить чтоб исключить это твое "не так", иначе разленившийся программист будет тыкать try везде где попало абы заткнуть рот операционке - мол "хавай и не вякай", а проблема не решена. try это тоже палка о двух концах, если программист понадеялся на перехват исключения, то результат работы программы может в некоторых ситуациях быть оч. пагубным (например испортить базу данных) мне доводилось видать чужую писанину где авторы не давали откат при ошибках на клиенте, таким образом портя данные в базах, а клиенты долго думали "Чего ж неправильно программа пишет?" Звонили в службо поддержки, им обьясняли мол "раз вы ошибку на экране не видите то сами виноваты".
I'm learning to live...

Последний раз редактировалось Stilet; 11.08.2010 в 12:24.
Stilet вне форума Ответить с цитированием
Старый 11.08.2010, 12:25   #15
Ins
Форумчанин
 
Регистрация: 29.12.2007
Сообщений: 137
По умолчанию

Цитата:
но тем не менее в некоторых ситуациях я не использую Деструкторы.
Ситуаций, где явно не нужно вызывать Free, не так уж и много. По сути все сводится к тому, что если за уничтожение объекта отвечает кто-то другой, то явный Free может быть не нужен. Ну а присвоение nil объектной ссылке НИКОГДА не приведет к уничтожению объекта, разве что только в том случае, если мы присваиваем объектному свойству, сеттер которого это предусматривает. Присвоение nil - это для интерфейсных ссылок работает, но не для объектных.

Некоторые ситуации, даже если они и гипотетически возможны, нисколько не оправдывают подобный код ЗДЕСЬ

Цитата:
Ты будешь удивлен но Free не всегда верный способ. На нем тоже можно проколоться.
Расшифруй, особливо в применении к ДАННОМУ случаю

Цитата:
Если в блоке ниже что-то пойдет не так это свидетельство того что программу нужно поправить чтоб исключить это твое "не так"
Не все исключения - это ошибки в программе. Исключение может быть частью протокола между вызываемым и вызывающим кодом, так же, как, скажем, возвращаемое значение или out-параметры. Обработка таких исключений - это повседневная задача программиста, ну а try..finally - это вообще отдельная история, которая, собственно, даже к обработке исключений относится посредственно. Это гарантия освобождения ресурсов. Блок finally получает управление не только при исключении, но и при Exit

Последний раз редактировалось Ins; 11.08.2010 в 12:31.
Ins вне форума Ответить с цитированием
Старый 11.08.2010, 12:27   #16
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
нисколько не оправдывают подобный код ЗДЕСЬ
Ладно, пусть так. )
Спорить не буду.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.08.2010, 12:32   #17
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Цитата:
Если в блоке ниже что-то пойдет не так это свидетельство того что программу нужно поправить чтоб исключить это твое "не так", иначе разленившийся программист будет тыкать try везде где попало абы заткнуть рот операционке - мол "хавай и не вякай", а проблема не решена. try это тоже палка о двух концах, если программист понадеялся на перехват исключения, то результат работы программы может в некоторых ситуациях быть оч. пагубным (например испортить базу данных) мне доводилось видать чужую писанину где авторы не давали откат при ошибках на клиенте, таким образом портя данные в базах, а клиенты долго думали "Чего ж неправильно программа пишет?" Звонили в службо поддержки, им обьясняли мол "раз вы ошибку на экране не видите то сами виноваты".
Этот бред вы мне сейчас рассказываете? Возвращайтесь, пожалуйста, к Паскалю в 80-е, где не было исключений, но не надо учить этому новичков.

Stilet, я не лично к вам прикапываюсь, а к тому, что вы иногда пишете.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 11.08.2010, 12:47   #18
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
но не надо учить этому новичков.
Не буду разводить холливар, просто скажу "Не веришь - не надо".
Не дай боже тебе напороться на подобные ошибки со стороны других программистов, когда ты сидишь и думаешь где же ты в вводе данных ошибся, когда на самом деле не твоя вина.

Цитата:
а к тому, что вы иногда пишете.
Эх.. Тебя бы к нам в контору, понавидался бы ты такого...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.08.2010, 17:27   #19
ZvEr_HaCkEr
VisualC++/DirectX
Форумчанин
 
Аватар для ZvEr_HaCkEr
 
Регистрация: 16.07.2010
Сообщений: 831
По умолчанию

как я понял из беседы на так исправить надо?
Код:
procedure TForm1.EnClick(Sender: TObject);
var
 i:tinifile;
 k:integer;
begin
i:=tinifile.Create(extractfilepath(paramstr(0))+'sources/languages/En.ini');
try
for k := 0 to componentcount - 1 do begin
 if components[k] is Tmenuitem then
tmenuitem(components[k]).Caption:=i.ReadString('Menu',tmenuitem(components[k]).Name,tmenuitem(components[k]).Caption);
end;
finally
i.Free ;
end;
end;

Последний раз редактировалось ZvEr_HaCkEr; 11.08.2010 в 17:34.
ZvEr_HaCkEr вне форума Ответить с цитированием
Старый 12.08.2010, 02:48   #20
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Да, правильно.

Надеюсь, что понятно, почему так, а то мы что-то между собой увлеклись...
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Рейтинг языков программирования. profi Свободное общение 18 21.03.2010 22:16
Как пересмотреть все секции в INI.ini ? iskurt Помощь студентам 1 31.01.2010 07:48
Поддержка языков -Flasher- Общие вопросы Delphi 6 06.01.2010 11:26
Перевод данных из DBGrid в Listbox через Ini Val Rubis БД в Delphi 3 05.01.2010 05:29
Смена языков Djessik@ Microsoft Office Word 10 18.12.2009 16:55