Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

FreeAndNil


Страницы:   1 2 3 4 5 6 7

mike_zav ©   (2007-09-21 17:37:00) 

В каких случаях применяют FreeAndNil? А в каких просто .Free?
Зачем это нужно? Если можно с примером.


oxffff   (2007-09-24 22:29:00) [1]

Leonid Troyanovsky ©   (24.09.07 17:35) [119]
Джо ©   (24.09.07 20:11) [120]

Конструктивно и выразительно, но непонятно.


Джо   (2007-09-24 20:11:00) [2]

> [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, а типизированный указатель
> >
> > Увы, синтаксис не позволяет.
>
> А почему "увы"? По-моему, да и хрен с ним.

Да по-моему так же.


Leonid Troyanovsky   (2007-09-24 17:35:00) [3]


> Джо ©   (24.09.07 17:12) [117]

> > Dispose должен быть не Pointer, а типизированный указатель
>
> Увы, синтаксис не позволяет.

А почему "увы"? По-моему, да и хрен с ним.
Кому сейчас нужны структуры со стрингами и вариантами.
Т.е., кому нужны - пользуют объекты.

--
Regards, LVT.


Инс   (2007-09-24 17:19:00) [4]


> Увы, синтаксис не позволяет.

Так и с FreeAndNil та же история. Нельзя написать
procedure FreeAndNil(var Obj: TObject);


Джо   (2007-09-24 17:12:00) [5]

> [115] Инс ©   (24.09.07 16:44)
> Это я г-ну Джо объяснял, почему в парметрах к процедуре
> Dispose должен быть не Pointer, а типизированный указатель

Увы, синтаксис не позволяет.


Anatoly Podgoretsky   (2007-09-24 16:51:00) [6]

> Инс  (24.09.2007 16:44:55)  [115]

Это я сейчас не знаю (не помню), но это не относится к тому моменту, когда я захочу использовать.


Инс   (2007-09-24 16:44:00) [7]


> Я хорошо знаю, что они умнее и для чего нужны, но что же
> мне делать, если я не использую таких структур, да и память
> уже не помню когда выделял.

Это я г-ну Джо объяснял, почему в парметрах к процедуре Dispose должен быть не Pointer, а типизированный указатель, хотя и вам тоже полезно будет, так как то, что вы хорошо знаете, что они умнее и для чего нужны - я уже сомневаюсь, судя по фразе "Не знаю, давно не использовал Dispose, но по моему должен". А насчет FreeAndNil - что тут обсуждать. Все уже давно сказано, каждый остается при своем. Я вот только понять не могу, почему те, кто не согласен с Borland, до сих пор сидят за Delphi...


oxffff   (2007-09-24 16:38:00) [8]


> Anatoly Podgoretsky ©   (24.09.07 16:36) [113]
> > oxffff  (24.09.2007 16:26:51)  [111]
>
> Не в ту степь обсуждение пошло, давайте продолжать обсасывать,
>  облизывать FreeAndNil или исписались?


oxffff ©   (24.09.07 15:17) [97]


Anatoly Podgoretsky   (2007-09-24 16:36:00) [9]

> oxffff  (24.09.2007 16:26:51)  [111]

Не в ту степь обсуждение пошло, давайте продолжать обсасывать, облизывать FreeAndNil или исписались?


Anatoly Podgoretsky   (2007-09-24 16:35:00) [10]

> Инс  (24.09.2007 16:04:49)  [109]

Я хорошо знаю, что они умнее и для чего нужны, но что же мне делать, если я не использую таких структур, да и память уже не помню когда выделял.


oxffff   (2007-09-24 16:26:00) [11]


> Тебе же сказали, что все делают ручками.


А при возможности вообще пишут не на ассемблере, а сразу в машинных кодах.


oxffff   (2007-09-24 16:16:00) [12]


> Инс ©   (24.09.07 16:04) [109]
> GetMem/FreeMem - это тупое выделение и освобождение памяти.
>  New и Dispose - умнее, они инициализируют и финализируют
> поля финализируемых типов. Если вызвать Dispose и передать
> ей нетипизированный указатель на стуктуру, содержащую такие
> поля, они финализированы не будут. Это очень частая ошибка.
>


Тебе же сказали, что все делают ручками.

FreeMem(pointer(integer(rec^.s)-8))

Typeinfo это вред.

:)


Инс   (2007-09-24 16:04:00) [13]

GetMem/FreeMem - это тупое выделение и освобождение памяти. New и Dispose - умнее, они инициализируют и финализируют поля финализируемых типов. Если вызвать Dispose и передать ей нетипизированный указатель на стуктуру, содержащую такие поля, они финализированы не будут. Это очень частая ошибка.


Anatoly Podgoretsky   (2007-09-24 15:59:00) [14]

> Джо  (24.09.2007 15:51:45)  [105]

Не знаю, давно не использовал Dispose, но по моему должен, это же указатель на структуру или простой тип, а тут речь об объектах.
Разные все таки вещи. Я всегда использую GetMem/FreeMem может крома младенческих лет. Эти функции честные - сказано выделить память и никаких других толкований.


Инс   (2007-09-24 15:59:00) [15]


> Джо ©   (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) - все будет нормально.


Anatoly Podgoretsky   (2007-09-24 15:56:00) [16]

> Инс  (24.09.2007 15:41:44)  [104]

> Примеры поломаных об FreeAndNil копий в студию.

Так выброшены, и копья ломают не из-за пострадавших, они действительно ССЗБ
Ломают над нужностью/не нужностью, из-за названия, из-за политики Борланда, которые во многих случаях пошли по популисткому пути, после Д5.
Я на стороне тех, кто не согласен с Борландом.


Джо   (2007-09-24 15:51:00) [17]

> [93] Инс ©   (24.09.07 15:06)
> Раз уж такое дело, то и Dispose использовать вредно. Там ведь  
> параметр типа Pointer стоит, который на самом деле таковым быть не
> должен.

Как это «не должен» и почему так?


Инс   (2007-09-24 15:41:00) [18]


> Чего тут спорить, с момента появления FreeAndNil ломают
> копья.

А до этого не ломали? Примеры поломаных об FreeAndNil копий в студию. Только не нужно приводить примеры, когда пострадавшие - уже упомянутые выше ССЗБ, они и на ровном месте себе шею сломают.


Anatoly Podgoretsky   (2007-09-24 15:38:00) [19]

Чего тут спорить, с момента появления FreeAndNil ломают копья.
Разве это недостаточный критерий порочности?


Инс   (2007-09-24 15:32:00) [20]


> Борланды в справке всё подробненько расписали, но "не царское
> это дело читать справку" у ССЗБ-н...

Это ты не мне, а [82] объясни.


Страницы:   1 2 3 4 5 6 7

Наверх

Титульная страница Поиск, карта сайта Написать письмо