![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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 )?
см. (*)