powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Улучшил FreeAndNil. Можете не благодарить.
25 сообщений из 226, страница 3 из 10
Улучшил FreeAndNil. Можете не благодарить.
    #39953410
rashid.abzalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxim RusovЧитают SQL.ru!
Это старый тикет - RSP-27208 .
...
Рейтинг: 0 / 0
Улучшил FreeAndNil. Можете не благодарить.
    #39953415
Фотография Dmitry Arefiev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Этот вариант FreeAndNil позволяет его вызывать с не-lvalue, как то свойства, результаты функций. Но если выбирать между type-safety и lvalue-safety, то я однозначно за type-safety. Сколько багов в мире существует из-за этого ...
...
Рейтинг: 0 / 0
Улучшил FreeAndNil. Можете не благодарить.
    #39953422
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry Arefiev
Этот вариант FreeAndNil позволяет его вызывать с не-lvalue, как то свойства, результаты функций.

Имхо, это ничем не плохо и в некоторых редких ситуациях удобно. Ровно как и оригинальный вариант - ничем не плох и в некоторых ситуациях удобен. Лично по мне, всё это "улучшение" сугубо теоретическое, на практике FreeAndNil более чем хорош, проблем с ним я в жизни не видел, и чтобы их организовать, нужно такое выдающееся головотяпство, что, мягко говоря, не на зеркало стоит пенять.
...
Рейтинг: 0 / 0
Улучшил FreeAndNil. Можете не благодарить.
    #39953486
Фотография Dmitry Arefiev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тебе повезло, что ты с ним никогда проблем не видел. Не все такие визучие ...

Я видел много случаев освобождения динамических и не только массивов, интерфейсов и тд. Классический пример - был класс, его рефакторили в интерфейс, про FreeAndNil забыли или не все места нашли.

То что новый вариант не lvalue-safe, приведет к другим багам, но в меньшем кол-ве.
...
Рейтинг: 0 / 0
Улучшил FreeAndNil. Можете не благодарить.
    #39953544
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry Arefiev
Тебе повезло, что ты с ним никогда проблем не видел. Не все такие визучие ...

Месяца через три после того, как я в первый раз стал начальником отдела, я встал перед необходимостью уволить двоих программистов. На их примере я выработал простой принцип: не брать себе в подчинение тех людей, которых не я собеседовал и не я выбирал. С тех пор, то есть уже где-то шестнадцать лет, я не уволил ни одного человека. Необходимости не было. Видимо, тех, с кем она возникла бы, я отсеиваю ещё на собеседовании. Очень везучий.

Dmitry Arefiev
Классический пример - был класс, его рефакторили в интерфейс, про FreeAndNil забыли или не все места нашли.

Это да, такими странными вещами я не занимаюсь. В том числе поэтому мне и везёт.

Dmitry Arefiev
То что новый вариант не lvalue-safe, приведет к другим багам, но в меньшем кол-ве.

Если налить в чайник раствор серной кислоты и прокипятить, довольно велик риск неприятных последствий. Но это не значит, что чайник плох и приводит к багам.
...
Рейтинг: 0 / 0
Улучшил FreeAndNil. Можете не благодарить.
    #39953550
Фотография Dmitry Arefiev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так разговор не про крайние случаи, типа серная кислота в чайник, а про среднюю температуру по больнице. Ты имеешь право, как везучий, определить FreeAndNil как тебе удобнее, или ожидать от своих правильного использования. Эмба же не начальник никому, поэтому улучшили определение ...
...
Рейтинг: 0 / 0
Улучшил FreeAndNil. Можете не благодарить.
    #39953556
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да улучшила и улучшила, почему бы и нет. Ну, может, отвалится какой-нибудь код двадцатилетней давности, типа FreeAndNil(TreeNode.Data), так, мягко говоря, не жалко. Просто, имхо, здесь нечего обсуждать на три страницы.
...
Рейтинг: 0 / 0
Улучшил FreeAndNil. Можете не благодарить.
    #39953703
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
Да улучшила и улучшила, почему бы и нет. Ну, может, отвалится какой-нибудь код двадцатилетней давности, типа FreeAndNil(TreeNode.Data), так, мягко говоря, не жалко. Просто, имхо, здесь нечего обсуждать на три страницы.

А FreeAndNil(TObject(TreeNode.Data)) прокатит?.. И разве Pointer можно передать как 'var Obj: TObject' ?
...
Рейтинг: 0 / 0
Улучшил FreeAndNil. Можете не благодарить.
    #39953720
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp
softwarer
Да улучшила и улучшила, почему бы и нет. Ну, может, отвалится какой-нибудь код двадцатилетней давности, типа FreeAndNil(TreeNode.Data), так, мягко говоря, не жалко. Просто, имхо, здесь нечего обсуждать на три страницы.

А FreeAndNil(TObject(TreeNode.Data)) прокатит?..

Думаю, прокатит. И это будет хорошо и правильно.

alekcvp
И разве Pointer можно передать как 'var Obj: TObject' ?

Я лет двадцать не смотрел в декларацию FreeAndNil. Мои воспоминания о том, что там просто бестиповая переменная, отстали от жизни? Насколько я помню, var мешает употребить там TObject.
...
Рейтинг: 0 / 0
Улучшил FreeAndNil. Можете не благодарить.
    #39953757
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp
И разве Pointer можно передать как 'var Obj: TObject' ?

Я лет двадцать не смотрел в декларацию FreeAndNil. Мои воспоминания о том, что там просто бестиповая переменная, отстали от жизни? Насколько я помню, var мешает употребить там TObject.[/quot]
Да, действительно, там просто var Obj; ...
...
Рейтинг: 0 / 0
Улучшил FreeAndNil. Можете не благодарить.
    #39953780
Фотография Maxim Rusov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp
А FreeAndNil(TObject(TreeNode.Data)) прокатит?

Проблема в том, что он может и откомпилируется, но будет тихо глючить. Типа объект уничтожается, а Data не обнуляется. По крайней мере одну такую ошибку я словил. Глюк в компиляторе, наверное. Так что я остановился на таком варианте:

procedure FreeObj(const [ref] Obj :TObject); overload; inline;
procedure FreeObj(const [ref] Obj :Pointer); overload; inline;

Интересно, до этого эмба додумалась? :)
...
Рейтинг: 0 / 0
Улучшил FreeAndNil. Можете не благодарить.
    #39953783
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что мешает просто сделать:

Код: pascal
1.
2.
TObject(TreeNode.Data).Free;
TreeNode.Data:=nil;


Зачем нужен этот кривой костыль с FreeAndNil?
Неужели это все только ради того чтобы одну строчку сэкономить?
...
Рейтинг: 0 / 0
Улучшил FreeAndNil. Можете не благодарить.
    #39953789
Vizit0r
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat
Что мешает просто сделать:

Код: pascal
1.
2.
TObject(TreeNode.Data).Free;
TreeNode.Data:=nil;


Зачем нужен этот кривой костыль с FreeAndNil?
Неужели это все только ради того чтобы одну строчку сэкономить?


этот вопрос и меня занимает)
...
Рейтинг: 0 / 0
Улучшил FreeAndNil. Можете не благодарить.
    #39953791
Фотография Maxim Rusov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не используете - проходите мимо. Не мешайте ценителям обсуждать высокие материи.

1. FreeAndNil имеет эстетическую ценность.

2. В нем большой практический смысл, заключающийся в локальной переменной. Просто вы его еще не постигли (кажется я это уже писал?...)
...
Рейтинг: 0 / 0
Улучшил FreeAndNil. Можете не благодарить.
    #39953802
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat
Что мешает просто сделать:

Код: pascal
1.
2.
TObject(TreeNode.Data).Free;
TreeNode.Data:=nil;


Зачем нужен этот кривой костыль с FreeAndNil?
Неужели это все только ради того чтобы одну строчку сэкономить?

Что будет, если внутри TObject(TreeNode.Data).Destroy случится исключение?
...
Рейтинг: 0 / 0
Улучшил FreeAndNil. Можете не благодарить.
    #39953803
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp,

Если может случится исключение то ясное дело что его надо обрабатывать.

Как и в случе FreeAndNil.
...
Рейтинг: 0 / 0
Улучшил FreeAndNil. Можете не благодарить.
    #39953804
rgreat

Зачем нужен этот кривой костыль с FreeAndNil?


Как он может быть кривым? По твоей логике, все функции кривые. Которые требуют правильного заполнения. Которые ты можешь неверно заполнить, или неверно передать значение.
...
Рейтинг: 0 / 0
Улучшил FreeAndNil. Можете не благодарить.
    #39953805
Возможно rgreat когда то обжёгся в сях с макросами, а в сях с плюсами с шаблонами. Теперь они универсальные функции боится как раскалённой палки, которая бьёт по спинке ломая хребет
...
Рейтинг: 0 / 0
Улучшил FreeAndNil. Можете не благодарить.
    #39953806
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВсеРазумный
Как он может быть кривым?
Просто.

Проблемы разных реализаций и применений этой процедуры тут уже несколько страниц обсуждают.

Не говоря уже о том что при вгляде на содержимое этой процедуры меня просто эстетически корежит.
...
Рейтинг: 0 / 0
Улучшил FreeAndNil. Можете не благодарить.
    #39953820
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat
alekcvp,
Если может случится исключение то ясное дело что его надо обрабатывать.
Как и в случе FreeAndNil.

Только в случае FreeAndNil() указатель будет обнулён, а в вашем варианте - нет.
...
Рейтинг: 0 / 0
Улучшил FreeAndNil. Можете не благодарить.
    #39953823
rgreat,

Ой да ладно. Корёжит вас. Компилятору как то, ну вообще пофиг. Что вы напишите ручками, что вы заюзаете данную функцию. По итогу будет аналогичный код.


А то что, кто - то не внимательный, и пихает в неё всё подряд - это его вина.


Такой человек вообще, вряд - ли напишет рабочий продукт хотя бы на 2% И уже проблема не в функции.
...
Рейтинг: 0 / 0
Улучшил FreeAndNil. Можете не благодарить.
    #39953824
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp,

Указатель-то обнулен, а вот сам объект не[до]освобожден.
Вот и думай. что хуже.))
...
Рейтинг: 0 / 0
Улучшил FreeAndNil. Можете не благодарить.
    #39953825
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp
Только в случае FreeAndNil() указатель будет обнулён, а в вашем варианте - нет.
Так это то как раз очень плохо.
Очистка объекта не завершена а указатель уже обнулен.

Мы имеем утечку памяти и все предпосылки к сбою, в случае если если это не до убитый поток или нечто с этим связанное.
...
Рейтинг: 0 / 0
Улучшил FreeAndNil. Можете не благодарить.
    #39953930
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad F
Указатель-то обнулен, а вот сам объект не[до]освобожден.
Вот и думай. что хуже.))

Нечего думать. Необнулённый указатель гораздо хуже.
...
Рейтинг: 0 / 0
Улучшил FreeAndNil. Можете не благодарить.
    #39953947
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
Vlad F
Указатель-то обнулен, а вот сам объект не[до]освобожден.
Вот и думай. что хуже.))

Нечего думать. Необнулённый указатель гораздо хуже.

И это всего лишь твое неподкрепленное частное мнение.))
...
Рейтинг: 0 / 0
25 сообщений из 226, страница 3 из 10
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Улучшил FreeAndNil. Можете не благодарить.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]