Текущий архив: 2007.10.21;
Скачать: CL | DM;
Вниз
FreeAndNil Найти похожие ветки
← →
Игорь Шевченко © (2007-09-24 13:04) [80]Borland же честно подписал "Be careful to only pass TObjects to this routine." :)
← →
Anatoly Podgoretsky © (2007-09-24 13:04) [81]Откомпилируется, не в таком конец виде, это же шаблон
var
I: Integer;
begin
I := 0;
FreeAndNil(I);
← →
Anatoly Podgoretsky © (2007-09-24 13:14) [82]> Игорь Шевченко (24.09.2007 13:04:20) [80]
В гробу такую честность.
← →
Инс © (2007-09-24 13:24) [83]
> Функция FreeAndNil сравни функии IncDay
IncDay - хорошая функция. Позволяет не привязываться к реализации типа TDateTime, а заодно делает код более читаемым, особенно если в нем интенсивно используются подобные IncXXX-функции.
← →
Turbouser © (2007-09-24 13:30) [84]> [83] Инс © (24.09.07 13:24)
> IncDay — хорошая функция.
=))) Был тут энтузиаст :)
Свой incday изобрел — у EGA23 до сих пор наверное
на стене висит — бо настроение поднимать :)))
← →
Leonid Troyanovsky © (2007-09-24 13:32) [85]
> oxffff © (24.09.07 12:12) [77]
Согласен с Анатолием.
Хорошо б еще не забывать,
что ссылка может быть не единственной.
--
Regards, LVT.
← →
Anatoly Podgoretsky © (2007-09-24 13:56) [86]> Leonid Troyanovsky (24.09.2007 13:32:25) [85]
Правильно не надо закладываться на повторное использование переменных.
Просто надо решать надо иначе, через защищенное поле и контролируемое свойство и волосы будут шелковистыми.
Это решение дешевле, чем искать проблемы, героически с ними бороться.
А основная претензия к функции, что параметр не типизированый, со всем вытекающим из этого.
← →
oxffff © (2007-09-24 14:41) [87]
> А основная претензия к функции, что параметр не типизированый,
> со всем вытекающим из этого.
Так сделали они это по известным причинам, на которые вы намекали выше.
А именно, чтобы использовать в качестве параметра, любой ссылочный тип в основном Tobject и pointer. Но поскольку они не совместимы, если их передавать как var.
Им достаточно было сделать то, что я предлагаю, а именно сделать неявное приведение для ccылочных типов с простой семантикой копирования переданных как var параметр. И было бы счастье и удобство.
← →
Инс © (2007-09-24 14:46) [88]
> Anatoly Podgoretsky © (24.09.07 13:04) [81]
Что, неужели вы в своих проектах так и делали?
← →
Anatoly Podgoretsky © (2007-09-24 14:58) [89]> oxffff (24.09.2007 14:41:27) [87]
Ну причины мы разобрали, а вот претензии остались.
Правда никто и не заставляет это использовать.
Счастье то будет в количестве строк и дополнительном геморое. Вот если они сделают это на уровне языка, тогда другое дело, только нафиг оно нужно. Пусть программист несет ответственность за свои действия.
← →
Anatoly Podgoretsky © (2007-09-24 15:00) [90]
> Что, неужели вы в своих проектах так и делали?
Конечно нет, это же демонстрация. Да и как бы я мог это сделать, если я не использую FreeAndNil
← →
Leonid Troyanovsky © (2007-09-24 15:02) [91]
> Anatoly Podgoretsky © (24.09.07 13:56) [86]
> Просто надо решать надо иначе, через защищенное поле и контролируемое
> свойство
Я даже предлагал как-то пример подобного
http://groups.google.com/group/fido7.ru.delphi.chainik/msg/2af895b1f348cbd1?dmode=source&output=gplain
--
Regards, LVT.
← →
oxffff © (2007-09-24 15:03) [92]
> Вот если они сделают это на уровне языка, тогда другое дело,
> только нафиг оно нужно
Так я именно об этом. :)
← →
Инс © (2007-09-24 15:06) [93]
> Конечно нет, это же демонстрация. Да и как бы я мог это
> сделать, если я не использую FreeAndNil
Насколько я понял, вы не используете именно потому, что боитесь так сделать. Странная у вас позиция, ну не нравится вам, и не пользуйтесь. Какой тут геморой может быть, кроме того надуманного, что вы привели, я не знаю. Раз уж такое дело, то и Dispose использовать вредно. Там ведь параметр типа Pointer стоит, который на самом деле таковым быть не должен.
← →
Anatoly Podgoretsky © (2007-09-24 15:08) [94]> Leonid Troyanovsky (24.09.2007 15:02:31) [91]
Так это решение вполне квалифицированое, в рамках идеологии ООП Дельфи.
← →
Anatoly Podgoretsky © (2007-09-24 15:09) [95]> oxffff (24.09.2007 15:03:32) [92]
Ты об нафиг оно нужно
← →
Anatoly Podgoretsky © (2007-09-24 15:16) [96]> Инс (24.09.2007 15:06:33) [93]
Не боюсь, я уже давно ничего не боюсь. Выбор сделан с осознанием.
Таки и не использую.
А кто сказал, что я Dispose использую?
← →
oxffff © (2007-09-24 15:17) [97]
> Anatoly Podgoretsky © (24.09.07 15:09) [95]
> > oxffff (24.09.2007 15:03:32) [92]
>
> Ты об нафиг оно нужно
:)
Вот если они сделают это на уровне языка
← →
Инс © (2007-09-24 15:22) [98]
> А кто сказал, что я Dispose использую?
А где, говоря о Dispose, я сказал "Вы"?
← →
Anatoly Podgoretsky © (2007-09-24 15:23) [99]В контексте сообщения отнес к себе, а оказалось я тут не причем.
← →
Инс © (2007-09-24 15:30) [100]А интерфейсами лучше вообще никогда не пользоваться, там в одном из ключевых методов (QueryInterface) вообще out-параметр.
← →
Плохиш © (2007-09-24 15:31) [101]
> Раз уж такое дело, то и Dispose использовать вредно.
Борланды в справке всё подробненько расписали, но "не царское это дело читать справку" у ССЗБ-н...
← →
Инс © (2007-09-24 15:32) [102]
> Борланды в справке всё подробненько расписали, но "не царское
> это дело читать справку" у ССЗБ-н...
Это ты не мне, а [82] объясни.
← →
Anatoly Podgoretsky © (2007-09-24 15:38) [103]Чего тут спорить, с момента появления FreeAndNil ломают копья.
Разве это недостаточный критерий порочности?
← →
Инс © (2007-09-24 15:41) [104]
> Чего тут спорить, с момента появления FreeAndNil ломают
> копья.
А до этого не ломали? Примеры поломаных об FreeAndNil копий в студию. Только не нужно приводить примеры, когда пострадавшие - уже упомянутые выше ССЗБ, они и на ровном месте себе шею сломают.
← →
Джо © (2007-09-24 15:51) [105]> [93] Инс © (24.09.07 15:06)
> Раз уж такое дело, то и Dispose использовать вредно. Там ведь
> параметр типа Pointer стоит, который на самом деле таковым быть не
> должен.
Как это «не должен» и почему так?
← →
Anatoly Podgoretsky © (2007-09-24 15:56) [106]> Инс (24.09.2007 15:41:44) [104]
> Примеры поломаных об FreeAndNil копий в студию.
Так выброшены, и копья ломают не из-за пострадавших, они действительно ССЗБ
Ломают над нужностью/не нужностью, из-за названия, из-за политики Борланда, которые во многих случаях пошли по популисткому пути, после Д5.
Я на стороне тех, кто не согласен с Борландом.
← →
Anatoly Podgoretsky © (2007-09-24 15:59) [107]> Джо (24.09.2007 15:51:45) [105]
Не знаю, давно не использовал Dispose, но по моему должен, это же указатель на структуру или простой тип, а тут речь об объектах.
Разные все таки вещи. Я всегда использую GetMem/FreeMem может крома младенческих лет. Эти функции честные - сказано выделить память и никаких других толкований.
← →
Инс © (2007-09-24 15:59) [108]
> Джо © (24.09.07 15:51) [105]
Мда...
type
PMyRec = ^TMyRec;
TMyRec = record
s: String;
i: Integer;
end;
....
var
rec: PMyRec;
p: Pointer;
begin
New(rec);
rec^.s:="123";
p:=rec;
Dispose(p);
end;
Ловим утечку памяти из-за того, что память под строку освобождена не будет. А если сделать Dispose(rec) - все будет нормально.
← →
Инс © (2007-09-24 16:04) [109]GetMem/FreeMem - это тупое выделение и освобождение памяти. New и Dispose - умнее, они инициализируют и финализируют поля финализируемых типов. Если вызвать Dispose и передать ей нетипизированный указатель на стуктуру, содержащую такие поля, они финализированы не будут. Это очень частая ошибка.
← →
oxffff © (2007-09-24 16:16) [110]
> Инс © (24.09.07 16:04) [109]
> GetMem/FreeMem - это тупое выделение и освобождение памяти.
> New и Dispose - умнее, они инициализируют и финализируют
> поля финализируемых типов. Если вызвать Dispose и передать
> ей нетипизированный указатель на стуктуру, содержащую такие
> поля, они финализированы не будут. Это очень частая ошибка.
>
Тебе же сказали, что все делают ручками.
FreeMem(pointer(integer(rec^.s)-8))
Typeinfo это вред.
:)
← →
oxffff © (2007-09-24 16:26) [111]
> Тебе же сказали, что все делают ручками.
А при возможности вообще пишут не на ассемблере, а сразу в машинных кодах.
← →
Anatoly Podgoretsky © (2007-09-24 16:35) [112]> Инс (24.09.2007 16:04:49) [109]
Я хорошо знаю, что они умнее и для чего нужны, но что же мне делать, если я не использую таких структур, да и память уже не помню когда выделял.
← →
Anatoly Podgoretsky © (2007-09-24 16:36) [113]> oxffff (24.09.2007 16:26:51) [111]
Не в ту степь обсуждение пошло, давайте продолжать обсасывать, облизывать FreeAndNil или исписались?
← →
oxffff © (2007-09-24 16:38) [114]
> Anatoly Podgoretsky © (24.09.07 16:36) [113]
> > oxffff (24.09.2007 16:26:51) [111]
>
> Не в ту степь обсуждение пошло, давайте продолжать обсасывать,
> облизывать FreeAndNil или исписались?
oxffff © (24.09.07 15:17) [97]
← →
Инс © (2007-09-24 16:44) [115]
> Я хорошо знаю, что они умнее и для чего нужны, но что же
> мне делать, если я не использую таких структур, да и память
> уже не помню когда выделял.
Это я г-ну Джо объяснял, почему в парметрах к процедуре Dispose должен быть не Pointer, а типизированный указатель, хотя и вам тоже полезно будет, так как то, что вы хорошо знаете, что они умнее и для чего нужны - я уже сомневаюсь, судя по фразе "Не знаю, давно не использовал Dispose, но по моему должен". А насчет FreeAndNil - что тут обсуждать. Все уже давно сказано, каждый остается при своем. Я вот только понять не могу, почему те, кто не согласен с Borland, до сих пор сидят за Delphi...
← →
Anatoly Podgoretsky © (2007-09-24 16:51) [116]> Инс (24.09.2007 16:44:55) [115]
Это я сейчас не знаю (не помню), но это не относится к тому моменту, когда я захочу использовать.
← →
Джо © (2007-09-24 17:12) [117]> [115] Инс © (24.09.07 16:44)
> Это я г-ну Джо объяснял, почему в парметрах к процедуре
> Dispose должен быть не Pointer, а типизированный указатель
Увы, синтаксис не позволяет.
← →
Инс © (2007-09-24 17:19) [118]
> Увы, синтаксис не позволяет.
Так и с FreeAndNil та же история. Нельзя написать
procedure FreeAndNil(var Obj: TObject);
← →
Leonid Troyanovsky © (2007-09-24 17:35) [119]
> Джо © (24.09.07 17:12) [117]
> > Dispose должен быть не Pointer, а типизированный указатель
>
> Увы, синтаксис не позволяет.
А почему "увы"? По-моему, да и хрен с ним.
Кому сейчас нужны структуры со стрингами и вариантами.
Т.е., кому нужны - пользуют объекты.
--
Regards, LVT.
← →
Джо © (2007-09-24 20:11) [120]> [118] Инс © (24.09.07 17:19)
> Так и с FreeAndNil та же история. Нельзя написать
> procedure FreeAndNil(var Obj: TObject);
Да сколько угодно :)
> [119] Leonid Troyanovsky © (24.09.07 17:35)
>
> > Джо © (24.09.07 17:12) [117]
>
> > > Dispose должен быть не Pointer, а типизированный указатель
> >
> > Увы, синтаксис не позволяет.
>
> А почему "увы"? По-моему, да и хрен с ним.
Да по-моему так же.
Страницы: 1 2 3 4 вся ветка
Текущий архив: 2007.10.21;
Скачать: CL | DM;
Память: 0.67 MB
Время: 0.069 c