|
|
|
Улучшил FreeAndNil. Можете не благодарить.
|
|||
|---|---|---|---|
|
#18+
Maxim RusovЧитают SQL.ru! Это старый тикет - RSP-27208 . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2020, 20:36 |
|
||
|
Улучшил FreeAndNil. Можете не благодарить.
|
|||
|---|---|---|---|
|
#18+
Этот вариант FreeAndNil позволяет его вызывать с не-lvalue, как то свойства, результаты функций. Но если выбирать между type-safety и lvalue-safety, то я однозначно за type-safety. Сколько багов в мире существует из-за этого ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2020, 20:50 |
|
||
|
Улучшил FreeAndNil. Можете не благодарить.
|
|||
|---|---|---|---|
|
#18+
Dmitry Arefiev Этот вариант FreeAndNil позволяет его вызывать с не-lvalue, как то свойства, результаты функций. Имхо, это ничем не плохо и в некоторых редких ситуациях удобно. Ровно как и оригинальный вариант - ничем не плох и в некоторых ситуациях удобен. Лично по мне, всё это "улучшение" сугубо теоретическое, на практике FreeAndNil более чем хорош, проблем с ним я в жизни не видел, и чтобы их организовать, нужно такое выдающееся головотяпство, что, мягко говоря, не на зеркало стоит пенять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2020, 21:19 |
|
||
|
Улучшил FreeAndNil. Можете не благодарить.
|
|||
|---|---|---|---|
|
#18+
Тебе повезло, что ты с ним никогда проблем не видел. Не все такие визучие ... Я видел много случаев освобождения динамических и не только массивов, интерфейсов и тд. Классический пример - был класс, его рефакторили в интерфейс, про FreeAndNil забыли или не все места нашли. То что новый вариант не lvalue-safe, приведет к другим багам, но в меньшем кол-ве. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.05.2020, 10:56 |
|
||
|
Улучшил FreeAndNil. Можете не благодарить.
|
|||
|---|---|---|---|
|
#18+
Dmitry Arefiev Тебе повезло, что ты с ним никогда проблем не видел. Не все такие визучие ... Месяца через три после того, как я в первый раз стал начальником отдела, я встал перед необходимостью уволить двоих программистов. На их примере я выработал простой принцип: не брать себе в подчинение тех людей, которых не я собеседовал и не я выбирал. С тех пор, то есть уже где-то шестнадцать лет, я не уволил ни одного человека. Необходимости не было. Видимо, тех, с кем она возникла бы, я отсеиваю ещё на собеседовании. Очень везучий. Dmitry Arefiev Классический пример - был класс, его рефакторили в интерфейс, про FreeAndNil забыли или не все места нашли. Это да, такими странными вещами я не занимаюсь. В том числе поэтому мне и везёт. Dmitry Arefiev То что новый вариант не lvalue-safe, приведет к другим багам, но в меньшем кол-ве. Если налить в чайник раствор серной кислоты и прокипятить, довольно велик риск неприятных последствий. Но это не значит, что чайник плох и приводит к багам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.05.2020, 14:47 |
|
||
|
Улучшил FreeAndNil. Можете не благодарить.
|
|||
|---|---|---|---|
|
#18+
Так разговор не про крайние случаи, типа серная кислота в чайник, а про среднюю температуру по больнице. Ты имеешь право, как везучий, определить FreeAndNil как тебе удобнее, или ожидать от своих правильного использования. Эмба же не начальник никому, поэтому улучшили определение ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.05.2020, 15:24 |
|
||
|
Улучшил FreeAndNil. Можете не благодарить.
|
|||
|---|---|---|---|
|
#18+
Да улучшила и улучшила, почему бы и нет. Ну, может, отвалится какой-нибудь код двадцатилетней давности, типа FreeAndNil(TreeNode.Data), так, мягко говоря, не жалко. Просто, имхо, здесь нечего обсуждать на три страницы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.05.2020, 15:37 |
|
||
|
Улучшил FreeAndNil. Можете не благодарить.
|
|||
|---|---|---|---|
|
#18+
softwarer Да улучшила и улучшила, почему бы и нет. Ну, может, отвалится какой-нибудь код двадцатилетней давности, типа FreeAndNil(TreeNode.Data), так, мягко говоря, не жалко. Просто, имхо, здесь нечего обсуждать на три страницы. А FreeAndNil(TObject(TreeNode.Data)) прокатит?.. И разве Pointer можно передать как 'var Obj: TObject' ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.05.2020, 13:39 |
|
||
|
Улучшил FreeAndNil. Можете не благодарить.
|
|||
|---|---|---|---|
|
#18+
alekcvp softwarer Да улучшила и улучшила, почему бы и нет. Ну, может, отвалится какой-нибудь код двадцатилетней давности, типа FreeAndNil(TreeNode.Data), так, мягко говоря, не жалко. Просто, имхо, здесь нечего обсуждать на три страницы. А FreeAndNil(TObject(TreeNode.Data)) прокатит?.. Думаю, прокатит. И это будет хорошо и правильно. alekcvp И разве Pointer можно передать как 'var Obj: TObject' ? Я лет двадцать не смотрел в декларацию FreeAndNil. Мои воспоминания о том, что там просто бестиповая переменная, отстали от жизни? Насколько я помню, var мешает употребить там TObject. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.05.2020, 14:17 |
|
||
|
Улучшил FreeAndNil. Можете не благодарить.
|
|||
|---|---|---|---|
|
#18+
alekcvp И разве Pointer можно передать как 'var Obj: TObject' ? Я лет двадцать не смотрел в декларацию FreeAndNil. Мои воспоминания о том, что там просто бестиповая переменная, отстали от жизни? Насколько я помню, var мешает употребить там TObject.[/quot] Да, действительно, там просто var Obj; ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.05.2020, 17:59 |
|
||
|
Улучшил FreeAndNil. Можете не благодарить.
|
|||
|---|---|---|---|
|
#18+
alekcvp А FreeAndNil(TObject(TreeNode.Data)) прокатит? Проблема в том, что он может и откомпилируется, но будет тихо глючить. Типа объект уничтожается, а Data не обнуляется. По крайней мере одну такую ошибку я словил. Глюк в компиляторе, наверное. Так что я остановился на таком варианте: procedure FreeObj(const [ref] Obj :TObject); overload; inline; procedure FreeObj(const [ref] Obj :Pointer); overload; inline; Интересно, до этого эмба додумалась? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.05.2020, 20:39 |
|
||
|
Улучшил FreeAndNil. Можете не благодарить.
|
|||
|---|---|---|---|
|
#18+
Что мешает просто сделать: Код: pascal 1. 2. Зачем нужен этот кривой костыль с FreeAndNil? Неужели это все только ради того чтобы одну строчку сэкономить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.05.2020, 20:51 |
|
||
|
Улучшил FreeAndNil. Можете не благодарить.
|
|||
|---|---|---|---|
|
#18+
rgreat Что мешает просто сделать: Код: pascal 1. 2. Зачем нужен этот кривой костыль с FreeAndNil? Неужели это все только ради того чтобы одну строчку сэкономить? этот вопрос и меня занимает) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.05.2020, 21:09 |
|
||
|
Улучшил FreeAndNil. Можете не благодарить.
|
|||
|---|---|---|---|
|
#18+
Не используете - проходите мимо. Не мешайте ценителям обсуждать высокие материи. 1. FreeAndNil имеет эстетическую ценность. 2. В нем большой практический смысл, заключающийся в локальной переменной. Просто вы его еще не постигли (кажется я это уже писал?...) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.05.2020, 21:23 |
|
||
|
Улучшил FreeAndNil. Можете не благодарить.
|
|||
|---|---|---|---|
|
#18+
rgreat Что мешает просто сделать: Код: pascal 1. 2. Зачем нужен этот кривой костыль с FreeAndNil? Неужели это все только ради того чтобы одну строчку сэкономить? Что будет, если внутри TObject(TreeNode.Data).Destroy случится исключение? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.05.2020, 22:48 |
|
||
|
Улучшил FreeAndNil. Можете не благодарить.
|
|||
|---|---|---|---|
|
#18+
alekcvp, Если может случится исключение то ясное дело что его надо обрабатывать. Как и в случе FreeAndNil. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.05.2020, 22:49 |
|
||
|
Улучшил FreeAndNil. Можете не благодарить.
|
|||
|---|---|---|---|
|
#18+
rgreat Зачем нужен этот кривой костыль с FreeAndNil? Как он может быть кривым? По твоей логике, все функции кривые. Которые требуют правильного заполнения. Которые ты можешь неверно заполнить, или неверно передать значение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.05.2020, 22:54 |
|
||
|
Улучшил FreeAndNil. Можете не благодарить.
|
|||
|---|---|---|---|
|
#18+
Возможно rgreat когда то обжёгся в сях с макросами, а в сях с плюсами с шаблонами. Теперь они универсальные функции боится как раскалённой палки, которая бьёт по спинке ломая хребет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.05.2020, 23:01 |
|
||
|
Улучшил FreeAndNil. Можете не благодарить.
|
|||
|---|---|---|---|
|
#18+
ВсеРазумный Как он может быть кривым? Проблемы разных реализаций и применений этой процедуры тут уже несколько страниц обсуждают. Не говоря уже о том что при вгляде на содержимое этой процедуры меня просто эстетически корежит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.05.2020, 23:14 |
|
||
|
Улучшил FreeAndNil. Можете не благодарить.
|
|||
|---|---|---|---|
|
#18+
rgreat alekcvp, Если может случится исключение то ясное дело что его надо обрабатывать. Как и в случе FreeAndNil. Только в случае FreeAndNil() указатель будет обнулён, а в вашем варианте - нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2020, 01:02 |
|
||
|
Улучшил FreeAndNil. Можете не благодарить.
|
|||
|---|---|---|---|
|
#18+
rgreat, Ой да ладно. Корёжит вас. Компилятору как то, ну вообще пофиг. Что вы напишите ручками, что вы заюзаете данную функцию. По итогу будет аналогичный код. А то что, кто - то не внимательный, и пихает в неё всё подряд - это его вина. Такой человек вообще, вряд - ли напишет рабочий продукт хотя бы на 2% И уже проблема не в функции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2020, 01:07 |
|
||
|
Улучшил FreeAndNil. Можете не благодарить.
|
|||
|---|---|---|---|
|
#18+
alekcvp, Указатель-то обнулен, а вот сам объект не[до]освобожден. Вот и думай. что хуже.)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2020, 01:11 |
|
||
|
Улучшил FreeAndNil. Можете не благодарить.
|
|||
|---|---|---|---|
|
#18+
alekcvp Только в случае FreeAndNil() указатель будет обнулён, а в вашем варианте - нет. Очистка объекта не завершена а указатель уже обнулен. Мы имеем утечку памяти и все предпосылки к сбою, в случае если если это не до убитый поток или нечто с этим связанное. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2020, 01:39 |
|
||
|
Улучшил FreeAndNil. Можете не благодарить.
|
|||
|---|---|---|---|
|
#18+
Vlad F Указатель-то обнулен, а вот сам объект не[до]освобожден. Вот и думай. что хуже.)) Нечего думать. Необнулённый указатель гораздо хуже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2020, 21:42 |
|
||
|
Улучшил FreeAndNil. Можете не благодарить.
|
|||
|---|---|---|---|
|
#18+
softwarer Vlad F Указатель-то обнулен, а вот сам объект не[до]освобожден. Вот и думай. что хуже.)) Нечего думать. Необнулённый указатель гораздо хуже. И это всего лишь твое неподкрепленное частное мнение.)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2020, 22:30 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39953820&tid=2038337]: |
0ms |
get settings: |
4ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
22ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
40ms |
get tp. blocked users: |
1ms |
| others: | 207ms |
| total: | 295ms |

| 0 / 0 |
