Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.10.21;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.68 MB
Время: 2.119 c
15-1190384723
мастерПакость
2007-09-21 18:25
2007.10.21
вопрос по HTML


2-1190635457
Alex.Rus
2007-09-24 16:04
2007.10.21
Процессы


2-1190726011
Yurikon
2007-09-25 17:13
2007.10.21
Вопрос по RecNO


2-1190979856
em240
2007-09-28 15:44
2007.10.21
TabSheet.enabled-вопрос


15-1190559516
DDDeN
2007-09-23 18:58
2007.10.21
Средство создания значков





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский