![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
классы и записи
ы © (2007-02-27 20:16:00)Скажите пожалуста какая разница создать свой класс или запись
в чем будут отличия
буду искрене признателен
Аноним (2007-02-28 14:19:00) [1]
> evvcom ©
> Именно к записям. Память под указатель будет выделена автоматически,
> например, в стеке, стоит только упомянуть переменную-указатель,
> а под саму запись в этом случае память придется выделять
> руками.
ну при чем тут записи. При объявлении переменной типа PByte произойдет ровно то же самое - память под указатель (4 байта) выделится автоматически (например в стеке), а память под предполагаемое содержимое (1 байт) надо выделать руками. Так что именно темазаписейв данном контексте отсутствует.
> Хорошо, память выделяется в коде, который выполняется непосредственно
> перед исполнением пользовательского кода конструктора
Память выделяется в виртуальном классовом методе NewInstance (или, как вариант, не выделяется, а возвращается указатель на какой то уже "готовый" блок).
С записями все несколько хуже - там нельзя управлять самим процессом выделения памяти (впрочем, в реальной жизни изменять поведение по умолчанию для объектов приходится крайне редко), но зато можно также использовать конструктор, который занимается тем, чем и должен - инициализацией полей данных.
evvcom (2007-02-28 14:09:00) [2]> [4] Аноним (28.02.07 11:40)
> (см. последние нововведения)
да, забыл об этом упомянуть
> Это не относится к записям, это относится к указателям.
Именно к записям. Память под указатель будет выделена автоматически, например, в стеке, стоит только упомянуть переменную-указатель, а под саму запись в этом случае память придется выделять руками.
> Память конструктором не выделяется
Хорошо, память выделяется в коде, который выполняется непосредственно перед исполнением пользовательского кода конструктора. Но так или иначе, он все же скорее относится к конструктору, нежели к чему-то другому.
Аноним (2007-02-28 11:40:00) [3]
> evvcom ©
> Запись содержит только данные
Не только. Еще методы и свойства (см. последние нововведения)
> память под нее можешь выделить как вручную, используя указатели
> на запись
Это не относится к записям, это относится к указателям.
> Память выделяется конструктором
Память конструктором не выделяется
evvcom (2007-02-28 10:24:00) [4]> [1] Аноним (27.02.07 20:32)
> 1. Память под запись выделяется и освобождается компилятором,
> для класса это необходимо делать руками
Ну ты загнул! :)
Запись содержит только данные, память под нее можешь выделить как вручную, используя указатели на запись, так и автоматом просто объявив переменную.
Класс же - это не только данные, но и свойства, методы и события для работы с ними. Память выделяется конструктором, реализованным в данном классе, который необходимо вызывать для каждого нового объекта.
ы (2007-02-27 20:37:00) [5]ууу и все.
всеравно спасибо
Аноним (2007-02-27 20:32:00) [6]Если упрощенно:
1. Память под запись выделяется и освобождается компилятором, для класса это необходимо делать руками
2. Записи нельзя наследовать.
(учитывая то, что в D2006 записи стали поддерживать методы идентификаторы видимости, свойства, и даже появилась возможность делать к ним хелперы, отличия и правда сократились)
Да пожалуй и все.