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

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

Record в class [D5, XP]


bns ©   (2006-11-02 15:01:00) 

В моем классе присутствует record:
-------------------------------------
type TMyRecord = record
 str : string;
 int : integer;
end;

type TMyClass = class
 public
   myrecord : TMyRecord;
 end;
-------------------------------------

Нужно ли после созданиия класса mc:=TMyClass.Create создавать record New(mr)?
В тестовом примере, что я делал - не нужно, myrecord создается сама. Почему это происходит?

Освобождается ли память от TMyRecord после mc.Free или нужно делать Dispose( mr )?

Спасибо.


DevilDevil   (2006-11-02 15:16:00) [1]

> Нужно ли после созданиия класса mc:=TMyClass.Create создавать record New(mr)?

Нет

> Почему это происходит?

Начнём с того, что Newи Disposeработают с указателями. Переменная типа TMyRecord - это не указатель, а полноценная переменная. А вот если бы ты объявил
public
  myrecord : ^TMyRecord;

, то переменная являлась бы указателем на неизвестно какую область в памяти. Поэтому и существует New: сначала динамически выделяется память, потом твоя переменная становится указателем на эту выделенную память. Но так лучше не делать...

> Освобождается ли память от TMyRecord после mc.Free

Да. Физически myrecordнаходится в памяти, которая была выделена под класс TMyClass. При освобождении TMyClass, освобождается myrecord.

> Спасибо.

Пожалуйста


Сергей М.   (2006-11-02 15:09:00) [2]


> Нужно ли после созданиия класса mc:=TMyClass.Create создавать
> record New(mr)?


Не нужно. Да и компилятор даст тебе по мозгам за такие дилетантские потуги.
(*)


> Освобождается ли память от TMyRecord после mc.Free или нужно
> делать Dispose( mr )?


см. (*)


Наверх

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